面向对象 #

"把一组数据结构和处理它们的方法组成对象(object),把相同行为的对象归纳为类(class),通过类的封装(encapsulation)隐藏内部细节,通过继承(inheritance)实现类的特化(specialization)和泛化(generalization),通过多态(polymorphism)实现基于对象类型的动态分派。"

  • 类--抽象的概念。例如人、动物
  • 对象--具体的属性、行为(方法),将有共性的对象抽象出来后成为类(归类)。例如人的身高
  • 封装--将一切实现细节用黑盒包装起来,只向外界提供编程接口。我们在类中定义的方法就是把数据和对数据的操作封装起来,在我们创建了对象之后,只需要给对象发送一个消息(调用方法)就可以执行方法中的代码
  • 继承--一种类的关系,例如学生和人的关系
  • 多态--子类在继承了父类的方法后,可以重写父类,当我们调用这个经过子类重写的方法时,不同的子类对象会表现出不同的行为

  1. python的特殊方法
    • init方法 __init__是一个特殊方法用于在创建对象时进行初始化操作
      当初始化一个实例时x=myClass(),实际上是调用x.__init__()
    • str方法 当使用print输出对象的时候,只要自己定义了__str__(self)方法,那么就会打印从在这个方法中return的数据
  2. 定义变量、函数名单下划线、双下划线的意义
    • _foo “单下划线” 开始的成员变量叫做保护变量,意思是只有类对象和子类对象自己能访问到这些变量,不能用“from xxx import *”而导入
    • __foo “双下划线” 开始的是私有成员,意思是只有类对象自己能访问,连子类对象也不能访问到这个数据
    • __foo__ 双下划线开头和结尾的代表python里特殊方法专用的标识,如__init__()代表类的构造函数
  3. 装饰器
    给函数动态加上功能

关于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