第十三章 面向对象编程
在 Python 中,面向对象编程主要有两个主题, 就是类和类实例。
利用 class 关键字创建一个类:
cIg22 MyNewObjectType(bases):
‘define MyNewObjectType class’
Class_suite
#bases 参数用于继承的父类
op读Gc$ 是“所有类之母”,若未指明父类,则 object 将作为默认的父类。
创建一个实例的语法: (注意:没有使用 uGM ,Python 根本就没有new 这个关键字) myFirstObject = MyNewObjectType()
添加类方法:
cIg22 MyDataWithMethod(object):
qGL printFoo(self):
#定义类
#定义方法
bL!u$ ‘You invoked printFoo()’
你可能注意到 self 参数, 它在所有的方法声明中都存在。 并且必须是第一个参数。 这个参 数代表实例对象本身, 当你调用方法的时候由解释器悄悄地传递给方法, 而不需要你自己 传递 self。
__init__()方法:类似于一个构造器,但不能说是一个构造器(因为 Python 没有使用 new) ,它在创建一个新的对象时被调用,完成一个初始化工作。
类、属性和方法的命名方式:
类:通常大写字母打头。这是标准惯例。有助于识别类。
属性:小写字母打头 + 驼峰,使用名词作为名字。
方法:小写字母打头 + 驼峰,使用谓词作为名字。
在 Python 中,声明与定义类是没有什么区别的,因为它们是同时进行的,定义(类体) 紧跟在声明(含 class 关键字的头行)和可选(但总是推荐)的文档字符串后面。
Python 不支持纯虚函数(如 C++)或抽象方法(如 Java)。
Python 严格要求, 没有实例,方法是不能被调用的。方法必须绑定(到一个实例)才能被 直接调用。
dir(class_name): 返回类对象的属性的一个名字列表
class_name.__dict__ : 返回的是一个字典, key 是属性名,value 是数据值
__init__()方法不应该返回任何对象,即, 它应该返回 None,否则将产生TypeError。
实例属性 VS 类属性:
类属性跟实例无关。这些值像静态成员那样被引用,即使在多次实例化中调用类, 类属性的值都不会改变。
子类可以通过继承覆盖父类的方法。类似,如果在子类中覆盖了了__init__()方法,那么基 类的__init__()就不会被自动调用了。
同 C++一样, Python 支持多继承。但要处理好两个方面:
要找到合适的属性
重写方法时,如何调用对应父类以“发挥他们的作用”,同时,在子类中处理好自 己的义务
vars()内建函数与 dir()相似,知识给定的对象都必须有一个__dict__属性。vars()返回一个字 典,包含了对象存储于其__dict__ 中的属性(键) 和值。