面向对象的三大特性:
1、封装 根据职责将属性和方法封装到一个抽象的类内
2、继承 主要是为了实现代码的重用,相同的代码不需要重复的编写
3、多态 不同的对象调用相同的方法,产生不同的执行结果,增加代码的灵活度
python中一切皆对象,包括变量,数据,函数等等内容
引用在面向对象中的应用:
- 在python中使用类创建对象后,对象名中记录的是创建出来对象的内存地址,也就是使用了一个变量名引用了新建的对象
- 使用print函数,传入对象名称,可以得到这个变量引用的对象是由哪个类创建的对象,以及他在内存中的地址(是以十六进制来表示的)
- %d 可以输出十进制的数字
- %x 可以输出十六进制的数字
self 的引用:
- 定义类的方法时,需要设置self参数
- 由哪一个对象调用了此方法,那么self就是哪一个对象的引用,self就等同于创建的对象名字
- 调用方法时,无需传递此参数,会自动将对象的引用传入
- 方法内部,可以通过
self.
访问对象的属性,也可以通过self.
调用其他的对象方法
初始化方法:
- 在日常开发中,不应使用在类外部给对象增加属性,因为一旦找不到程序会报错
- 对象包含的属性,应当在类中通过
__init__
内置方法来设置 - 当创建对象时,会自动为对象在内存中分配空间,并未对象的属性设置初始值,就输init方法中定义的属性
- init方法是专门用来定一个类具有哪些属性的方法
这样就确保了外部代码不能随意修改对象内部的状态,这样通过访问限制的保护,代码更加健壮。
但是如果外部代码要获取name和score怎么办?可以给Student类增加get_name和get_score这样的方法:
class Student(object):
...
def get_name(self):
return self.__name
def get_score(self):
return self.__score
如果又要允许外部代码修改score怎么办?可以给Student类增加set_score方法:
class Student(object):
...
def set_score(self, score):
self.__score = score