python類 & 物件風格
阿新 • • 發佈:2018-11-04
python物件風格object & 類class學習筆記
類class
- 一般類的建立
# 建立類
class Foo:
def bar(self): #self必填
print('Bar')
def hello(self, name):
print('I am %s' % name)
# 例項化
obj = Foo()
obj.bar
obj.hello('zzw')
- 通過建構函式例項化建立
class Foo:
def __init__(self, name, age): #注意inti前後是雙下劃線__,不是單_
name = self.name
age = self.age
##例項化
obj1 = Foo('zzw', 26)
print(obj1.name)
print(obj1.age)
obj2 = Foo('lg', 25)
print(obj2.name)
print(obj2.age)
物件風格object
python可以繼承多個類,有經典類 & 新式類 兩種
- 經典類(深度優先)
- 新式類(廣度優先) #推薦用
# 經典類
class A :
pass
class B(A):
pass
#新式類,當前類或父類繼承object類
class A(object):
pass
class B(A):
pass
例如,如下繼承關係
#經典類 & 新式類
class D:
def bar(self):
print 'D.bar'
class C(D):
def bar(self):
print 'C.bar'
class B(D):
def bar(self):
print 'B.bar'
#A繼承B、C
class A(B, C):
def bar(self):
print 'A.bar'
當物件A呼叫bar函式時:
a = A()
a.bar()
經典類和新式類的搜尋順序為:
A中搜索bar()
搜到-中止,不再搜尋
未搜到-報錯
多型特性
- 不支援類似與C++定義的多型寫法,python多型屬於“簡單直接”型別的
class B:
pass
class C1(B):
def bar(self):
print 'C1.bar'
class C2(B):
def bar(self):
print 'C2.bar'
# ####################### 多型寫法 ########################
# 1. C++型別(python偽code示意)
def detail(class B):
B.bar()
# 2. python型別
def detail(obj):
obj.bar()
# 呼叫
c1 = C1()
c2 = C2()
detail(c1) # C1.bar
detail(c2) # C2.bar