類的派生,組合
阿新 • • 發佈:2018-11-09
派生:
子類也可以新增自己新的屬性或者在自己這裡重新定義這些屬性(不會影響到父類),需要注意的是,一旦重新定義了自己的屬性且與父類重名,那麼呼叫新增的屬性時,就以自己為準了。
class Parent(): def process(self): raise TypeError("you should define self") class Son(Parent): pass s=Son() s.process()
Traceback (most recent call last):
File "F:/back02/interactiveclass.py", line 83, in <module>
s.process()
File "F:/back02/interactiveclass.py", line 75, in process
raise TypeError("you should define self")
TypeError: you should define self
class Parent():
def process(self):
raise TypeError("you should define self")
class Son(Parent):
def process(self): #自己重新定義父類的process,呼叫時用自己的
print("my process")
s=Son()
s.process()
my process
class Parent(): def process(self): raise TypeError("you should define self") def hello(self): return 123 class Son(Parent): def process(self): print("my process") print(Parent.hello(self)) #使用父類定義的 s=Son() s.process()
class Parent(): def process(self): raise TypeError("you should define self") def hello(self): return 123 class Son(Parent): def hello(self): print('myhello') def process(self): print("my process") print(Parent.hello(self)) self.hello() #使用自己的 s=Son() s.process()
組合:
組合指的是,在一個類中以另外一個類的物件作為資料屬性,稱為類的組合
class foo1(): def __init__(self,name,age): self.name=name self.age=age class foo2(): def __init__(self): self.obj=foo1('wes',13) #self.obj foo1()的一個物件,所以self.obj(s.obj)具有foo1()物件的所有屬性,也可以呼叫foo1類的方法 s=foo2() print(s.obj.name)
wes
class foo1():
def __init__(self,name,age):
self.name=name
self.age=age
def func(self):
print('foo1.func')
class foo2():
def __init__(self):
self.obj=foo1('wes',13)
s=foo2()
print(s.obj.name)
s.obj.func()
wes
foo1.func