class
python 是動態(tài)語言,對于每一個實例,都可以直接給他們的屬性賦值。
class Person():
pass
xiaohong = Person()
xiaohong.name = 'xiaoming'
xiaohong.age = 20
xiaoming = Person()
xiaoming.size = 50
print(xiaoming.size)
print(xiaohong)
初始化實例屬性
在定義類時,可以為Person類添加一個特殊的_init_()方法,當(dāng)創(chuàng)建實例時,_init_()方法被自動調(diào)用,每個實例都統(tǒng)一擁有屬性。
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
可以直接根據(jù)類訪問,不需要實例化
Person.address
當(dāng)然實例化的對象也可以訪問
實例屬性和類屬性
優(yōu)先級 : 類屬性 > 實例屬性
實例方法
和java 類中定義方法類似
@classmethod 類方法
在class中定義的全是實例方法,通過標(biāo)記一個 @classmethod,該方法將綁定到類上,而非類的實例。類方法的第一個參數(shù)將傳入類本身,通常將參數(shù)名命名為 cls
繼承
super(Student, self)將返回當(dāng)前類繼承的父類,
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))
多態(tài)
多重繼承
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...'