面向对象 #
"把一组数据结构和处理它们的方法组成对象(object),把相同行为的对象归纳为类(class),通过类的封装(encapsulation)隐藏内部细节,通过继承(inheritance)实现类的特化(specialization)和泛化(generalization),通过多态(polymorphism)实现基于对象类型的动态分派。"
- 类--抽象的概念。例如人、动物
- 对象--具体的属性、行为(方法),将有共性的对象抽象出来后成为类(归类)。例如人的身高
- 封装--将一切实现细节用黑盒包装起来,只向外界提供编程接口。我们在类中定义的方法就是把数据和对数据的操作封装起来,在我们创建了对象之后,只需要给对象发送一个消息(调用方法)就可以执行方法中的代码
- 继承--一种类的关系,例如学生和人的关系
多态--子类在继承了父类的方法后,可以重写父类,当我们调用这个经过子类重写的方法时,不同的子类对象会表现出不同的行为
- python的特殊方法
- init方法
__init__是一个特殊方法用于在创建对象时进行初始化操作
当初始化一个实例时x=myClass(),实际上是调用x.__init__() - str方法 当使用print输出对象的时候,只要自己定义了__str__(self)方法,那么就会打印从在这个方法中return的数据
- init方法
__init__是一个特殊方法用于在创建对象时进行初始化操作
- 定义变量、函数名单下划线、双下划线的意义
- _foo “单下划线” 开始的成员变量叫做保护变量,意思是只有类对象和子类对象自己能访问到这些变量,不能用“from xxx import *”而导入
- __foo “双下划线” 开始的是私有成员,意思是只有类对象自己能访问,连子类对象也不能访问到这个数据
- __foo__ 双下划线开头和结尾的代表python里特殊方法专用的标识,如__init__()代表类的构造函数
- 装饰器
给函数动态加上功能
关于super() takes at least 1 argument (0 given)问题
1) 在python2.x中,类的继承格式如下,函数super()需要两个实参:子类名和对象self。为帮助python将父类和子类联系起来,这两个参数必不可少。
2) 在python3.x中,类的继承格式如下,函数super()不需要携带实参
https://blog.csdn.net/lnlnlnln_925/article/details/90582558