Python-面向对象

属性命名

  • 属性以双下划线开头,类内变量,实例无法访问。但可以通过某些方式访问,例如Student例中定义了__name变量,可以用_Student_name来实现访问,但不建议,因为不同的解释器的转化方式不一样。
  • 单下划线可以打开,但需要注意不能随意更改。
  • 双下划线结尾与开头,特殊变量,类内可以访问,实例不知。

多态

开闭原则:定义一个类Animal及其多个之类Dog/Cat/…,当定义一个函数或操作时:

  • 对扩展开放:允许新增Animal的子类;
  • 对修改封闭:不需要修改依赖Animal类型的run_twice()等函数,仍然可以传入Dog/Cat等类。
    事实上,不需要继承也可以实现多态————鸭子类型。

若干方法

  • isinstance(object,class) 判断是否属于某个类
  • dir() 列举出一个对象的属性和方法
  • getattr()、setattr()、hasattr()可以获得、添加、查询是否需要某个属性
    • __slots__ 限制可以添加的属性,__slots__ = (‘name’, ‘age’) # 用tuple定义允许绑定的属性名称
  • 装饰器