8 类
类变量(变量名前加 类名. 或cls. 或self.来访问)、实例变量(在实例方法中定义,变量名前加 self.来访问)、类方法、实例方法、静态方法
class Animal: # 类对象
age = 0 # 类变量
def __init__(self, name): # 魔法方法
self.name = name # 实例变量
def smile(self): # 实例方法。 self指向实例对象
print self.age # 访问类变量
self.age = 10 # 定义实例变量。这时候实例对象的__dict__字典中已经存在了age这个属性。
print self.age # 访问实例变量
@classmethod
def run(cls): # 类方法。cls 指向类对象
pass
@staticmethod
def msg(): # 静态方法,可以没有参数
pass
类变量:所有实例化对象中是公用的。在类方法中通过“类名.变量名”, "cls.变量名"访问,在实例方法中通过“self.变量名”访问。
实例变量:定义在方法中的变量,只作用于当前实例的类。在实例方法中通过“self.变量名”定义后再访问,如果不定义直接访问,访问的是类变量。
创建实例对象:a = Bird(‘Tom’),不支持new
animal1 = Animal(‘Tom’)。不支持new。
类的继承:与C++类似,支持继承、多重继承
继承、多重继承、方法重写 与C++类似。
class Parent: # 定义父类
def myMethod(self):
print '调用父类方法'
class Child(Parent): # 定义子类
def myMethod(self):
print '调用子类方法'
c = Child() # 子类实例
c.myMethod() # 子类调用重写方法
单下划线、双下划线、头尾双下划线说明:控制访问权限,特殊方法
-
foo: 定义的是特殊方法,一般是系统定义名字 ,类似 init() 之类的。
-
_foo: 以单下划线开头的表示的是 protected 类型的变量,即保护类型只能允许其本身与子类进行访问,不能用于 from module import *
-
__foo: 双下划线的表示的是私有类型(private)的变量, 只能是允许这个类本身进行访问了