python面对对象(一)—什么是面向对象,类和实例,访问限制

终于开始了python的核心内容了,前面都是细枝末节的小东西。先开始第一个话题,什么是面向对象的编程(opp)。

1)什么是面向对象

我们可以拿C语言这个典型的面向过程的编程语言来对比,面对同样一个问题,”我吃饭“(原谅我是个吃货)。面向过程关注的是吃这个动作。而面向对象关注的是我饭这两个对象,而吃只是其中的一个方法。为什么这里用的是“或”呢?因为对象只能关注一个,不能三心二意。要不就关注”我“,要不就关注“饭”。因而,面向对象抽象度更高,因为他包含了两类事物,一类是数据,一类是动作。

2)类和对象

对于面向对象编程来说,我们固然关注对象,但是对象太多了。自然界中的任意一样东西都是对象。我们把各种对象中的某一属性剥离出来,让他们成为一类或者说是一个大的集合。这就叫做类(class),也是一种抽象的数据类型。比如说:动物(animal)。动物是个抽象的概念,我们在其中定义一个具体的动物,狼(wolf)。这就是实例(instance)。定义一个类的标准格式如下:

class Animal(object): def __init__(self,legs,eyes): self.legs=legs self.eyes=eyes

Animal是类名,一般首字母大写。后面括号表示的是这个类从哪个类继承下来的。下一行的__init__(是两个下划线)表示的是这是一个特殊的变量,就是特殊的方法。这个方法是把对象(实例)的属性绑定到这个对象(实例)上面。self是一个形式参数,表示的是这个对象(实例)本身。后面的两个是对这个类的预设属性。下面的两句,则是将该对象的属性绑定到对象上面。然后是指定一个实例。

wolf=Animal(4,2)print(wolf.eyes)

这里对wolf赋给属性。

3)访问限制

我们曾经讲过,函数和变量的作用域。很明显,我们刚刚定义的类,是public的,很容易被修改。示例如下:

wolf=Animal(4,2)print(wolf.eyes)wolf.eyes=3print(wolf.eyes)

输出:

23

你可以想一下,我们的一个对象如果这样被外部随意修改的话是很可怕的。因为不知道会有生命意想不到的事情发生。如果我们想保证对象的安全,不被随便修改,该怎么办呢?

我们可以采用_XXX类型数据来定义属性。示例如下:

#!/usr/bin/env python3# -*- coding: utf-8 -*-class Animal(object): def __init__(self,legs,eyes):#这三个都是形参 self.__legs=legs self.__eyes=eyes

我们尝试从外面访问:

wolf=Animal(4,2)print(wolf.__eyes)

输出:

Traceback (most recent call last): File "C:/Users/Administrator/PycharmProjects/exercise/exercise.py", line 8, in print(wolf.__eyes)AttributeError: 'Animal' object has no attribute 'eyes'

已经不能访问了。

我们思考一下,既然它提示的错误是这个对象没有eyes这个属性,是不是我们指定类就可以访问了?

说干就干!我们把代码改成如下格式:

wolf=Animal(4,2)print(wolf._Animal__eyes)

果然成功了!!但是千万不要随便这么干!因为不同的解释器会将__eyes改成不同的变量名。

那我们又想要访问怎么办呢?因为,我们是担心别的程序会误操作修改对象,但是如果我们确实有需要修改对象怎么办?这就涉及到面对对象的特性了。下回再说了。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180328G1NT7G00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券