87_类成员的继承和重写
生活随笔
收集整理的這篇文章主要介紹了
87_类成员的继承和重写
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 91.類成員的繼承和重寫
- 查看類的繼承層次結構
- 重寫的兩個例子
91.類成員的繼承和重寫
【操作】繼承和重寫的案例
class Person:def __init__(self, name, age):self.name = nameself.__age = age # 私有屬性def say_age(self):print("我的年齡:", self.__age) # 私有屬性 給一個接口 訪問 agedef say_introduce(self): # 自我介紹的意思print("我的名字是{0}".format(self.name))class Student(Person):def __init__(self, name, age, score):Person.__init__(self, name, age) # 必須顯式的調用父類初始化方法,不然解釋器不會去調用self.score = scoredef say_introduce(self):print("報告老師,我的名字是:{0}".format(self.name))s = Student("haizeiwang", 18, 80) s.say_age() s.say_introduce()運行結果:
我的年齡: 18 報告老師,我的名字是:haizeiwang查看類的繼承層次結構
通過類的方法 mro()或者類的屬性__mro__可以輸出這個類的繼承層次結構。
【操作】 查看類的繼承層次結構
class A:pass class B(A):pass class C(B):passprint(C.mro())執行結果:
# 從子孫后代開始排序。一直到 一切對象的 父類 object [<class '__main__.C'>, <class '__main__.B'>, <class '__main__.A'>, <class 'object'>]繼承結構圖
重寫的兩個例子
tips: 一定不要 和 python 內置的 命名 重復。
更加不要重復了 還 遞歸 調用。
其實這只是 一個例子罷了。 換湯不換藥而已。
class Oar:def __init__(self,oar):self.o=oardef print_(self):print(self.o) # print 不會到class Oar下面找,除非引用self.printdef decorator(cls):def print_(self): print('content: {}'.format(self.o))return selfcls.print_=print_return cls# InheritOar=decorator(InheritOar) 裝飾器 @ 符號等同于這一句 @decorator class InheritOar(Oar):passi=InheritOar("uinp") i.print_class Person:def __init__(self,name,id_):self.name=nameself.id_=id_def print_(self):print("name : %s | id : %s"%(self.name,self.id_))class Student(Person):passdef print_(s):print("this is onepis print %s and %s"%(s.name,s.id_))def print_(self):print("this is onepis print %s and %s "%(self.name,self.id_))Student.print_=print_s2=Student("Yamateh",2)s2.print_()
為什么最好 不要和python 關鍵字 重復命名。
看下面的示例
class Oar:def __init__(self,oar):self.o=oardef print(self):# 這里# 如果寫 print(self.o) 會導致遞歸調用根本無法打印。# 并且你的 self 在 遞歸的時候 就被 self.o 給替換掉了。 # print 不會到全局下面找,而是 引用self.print# 所以你的打印就成了死循環return self.o def decorator(cls):def print(self): return 'content: {}'.format(self.o)cls.print=printreturn cls# InheritOar=decorator(InheritOar) 裝飾器 @ 符號等同于這一句 @decorator class InheritOar(Oar):passi=InheritOar("uinp") i.print總結
以上是生活随笔為你收集整理的87_类成员的继承和重写的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微软活动目录逻辑结构分析
- 下一篇: java程序内存占用过高问题排查