类对象提供默认行为
- class语句创建类对象并将其赋值给变量名:Python class语句也是可执行语句,执行时会产生新的类对象,并且将其赋值给class头部的变量名
- class语句内的赋值语句会创建类的属性,class语句内的顶层的赋值语句会产生类对象中的属性,从技术来讲,class语句的作用域会变成类对象的属性的命名空间,就像模块的全局作用域一样,执行class语句后,类的属性可以由变量名点号运算获取object.name
- 类属性提供对象的状态和行为,类对象的属性记录状态信息和行为,可由这个类所创建的所有实例共享
实例对象是具体的元素:
- 向函数那样调用类对象会创建新的实例对象:每次类调用时,都会建立并且返回新的实例对象,实例代表程序领域中的具体元素
- 每个实例对象继承类的属性并且获得了自己的命名空间,由类所创建的实例对象是新的命名空间,一开始空的,但是会创建该实例的类对象内的属性
- 在方法内对self属性做赋值运算会产生每个实例自己的属性,对self的属性做赋值运算,会创建或修改实例内的数据而不是类内的数据
>>> class FirstClass :
def setdata(self,value):
self.data=value #self is the instance
def display(self):
print self.data
>>> one=FirstClass()
>>> two=FirstClass()
>>> one.setdata('one')
>>> two.setdata('two')
>>> one.display()
one
>>> two.display()
two
>>> FirstClass.addattr='comman'
>>> one.addattr
'comman'
>>> two.addattr
'comman'
类通过继承进行定制:
- 超类列在了类开头的括号中,要继承另一个类的属性,把该类列在class语句开头的括号中就可以了,含有继承的类称为子类
- 类从其超类中继承属性:当读取属性时,如果不存在于子类中,Python会自动搜索这个属性
- 实例会继承所有可读取的属性
- 每个object.attrbute都会开启新的独立搜索,Python会对每个属性取出表达式进行对类树的独立搜索,这包括在class语句外对实例和类的引用(X.attr)以及在类方法函数内对self实例参数属性的引用
- 逻辑的修改是通过创建子类而不是修改超类:在树中层次较低的子类中重新定义超类的变量名,子类就可以取代并且定制所继承的行为