class
python 是动态语言,对于每一个实例,都可以直接给他们的属性赋值。
class Person():
pass
xiaohong = Person()
xiaohong.name = 'xiaoming'
xiaohong.age = 20
xiaoming = Person()
xiaoming.size = 50
print(xiaoming.size)
print(xiaohong)
初始化实例属性
在定义类时,可以为Person类添加一个特殊的_init_()方法,当创建实例时,_init_()方法被自动调用,每个实例都统一拥有属性。
class Person():
def __init__(self,name,age):
self.name = name
self.age = age
xiaohong = Person('xiaoming',20)
print(xiaohong.name)
访问限制
__ 双下划线开头的属性不能被外部访问
class Person():
def __init__(self,name,age):
self.name = name
self.age = age
self.__class = 1
__class 属性不能直接被外部访问
以'__xx__' 形式存在的属性,可以被外部访问,在python中为特殊属性。
类属性
class Person(object):
address = 'Earth'
def __init__(self, name):
self.name = name
可以直接根据类访问,不需要实例化
Person.address
当然实例化的对象也可以访问
实例属性和类属性
优先级 : 类属性 > 实例属性
实例方法
和java 类中定义方法类似
@classmethod 类方法
在class中定义的全是实例方法,通过标记一个 @classmethod,该方法将绑定到类上,而非类的实例。类方法的第一个参数将传入类本身,通常将参数名命名为 cls
继承
super(Student, self)将返回当前类继承的父类,
class Person(object):
def __init__(self, name):
self.name = name
class Student(Person):
def __init__(self, name, score):
super(Student, self).__init__(name)
self.score = score
xiaobai = Student(1, 1)
print(isinstance(xiaobai,Person))
print(isinstance(xiaobai,Student))
多态
多重继承
class A(object):
def __init__(self, a):
print 'init A...'
self.a = a
class B(A):
def __init__(self, a):
super(B, self).__init__(a)
print 'init B...'
class C(A):
def __init__(self, a):
super(C, self).__init__(a)
print 'init C...'
#多重继承
class D(B, C):
def __init__(self, a):
super(D, self).__init__(a)
print 'init D...'