23 November 2013
  1. Python中类支持多重继承。
  2. 搜索对象的属性或方法时,按照由下到上,由左到右的顺序。因此在进行多重继承时,父类的顺序确定非常重要。
  3. 子类可能会在较低的位置重新定义超类的变量名,从而覆盖超类定义的行为。
  4. Python中方法定义必须明确添加一个self形参。这个参数类似与this。调用过程由系统自动将对象赋给self
  5. 实例可以单独附加属性,但这中属性只属于这些实例。在类中添加的属性则由所有子类及其实例共享。
    • 属性通常是在class语句中通过赋值语句添加到类中,而不是嵌入在函数的def语句中。
    • 属性通常是在类内,对传给函数的特许参数(self),做赋值运算而添加在实例中
  6. 构造函数:init(self,...)

类对象提供默认行为

  • class语句创建类对象并将其赋值给变量名。
  • class语句内的赋值语句会创建类的属性。
  • 类属性提供对象的状态和行为。

实例对象时具体的元素

  • 像函数一样调用类对象会创建新的实例对象
  • 每个实例对象继承类的属性并获得自己的命名空间。
  • 在方法内对self属性做赋值运算会产生每个实例自己的属性。
  • 可以在类方法函数外对实例的变量名进行赋值运算,甚至可以在实例命名空间范围内产生全新的属性。

Python属性继承机制

  • 超类列在了类开头的括号中
  • 类从其超类中继承属性
  • 实例会继承所有可读取类的属性。寻找变量名时,Python会检查实例,然后是它的类,最后是所有超类。
  • 每个object.attribute都会开启新的独立搜索。
  • 逻辑的修改是通过创建子类,而不是修改超类。

类是模块内的属性

类可以重载运算符

  • 以双下划线命名的方法有特许意义。Python运算符重载的实现是提供特许命名方法来拦截运算。每种运算符和特殊命名方法之间有固定的映射关系。
  • 运算符覆盖方法没有默认值,且没有必要。

可以在类外定义类的方法

def upperName(self):
    return self.name.upper()

class Person:
    def __init__(self, name):
        self.name = name

p = Person('Tom')
print upperName(p)

# add upperName to class
Person.upperName = upperName

q = Person('cat')
print q.upperName()

运行结果

TOM
CAT


blog comments powered by Disqus