「Python系列」 Python 之面向對象(四)


「Python系列」 Python 之面向對象(四)

繼承

繼承是面向對象編程的另一個重要功能。這是一個類(稱為子類或派生類)獲得的概念,即繼承了其他某個類(稱為超類或基類)的數據和函數成員。

在Python中,所有類都隱式繼承內置的Python類對象。但是,我們可以定義自己的類的繼承層次結構。

例如,我們將創建一個名為MyOtherClass的新類,該類繼承MyClass:

<code>>>> class MyOtherClass(MyClass):
... def __init__(self, u, v, w, x, y, z):
... super().__init__(x, y, z)
... self.__u, self.__v, self.__w = u, v, w
...
... def f_(self, arg):
... print('instance method f_ called')
... print(f'instance: {self}')
... print(f'instance attributes:\\n{vars(self)}')
... print(f'class: {type(self)}')
... print(f'arg: {arg}')
...
>>> d = MyOtherClass(1, 2, 4, 8, 16, 32)/<code>

MyOtherClass具有MyClass的成員:.x,._ y,.__ z和.f()。基類.x,._ y和.__ z的數據成員使用語句super().__ init __(x,y,z)初始化,該語句調用基類的.__ init __()方法。

MyOtherClass也具有自己的成員:.__ u,.__ v,.__ w和.f_()。

我們將使用vars()獲得數據成員:

<code>>>> vars(d)
{'x': 8,
'_y': 16,
'_MyClass__z': 32,
'_MyOtherClass__u': 1,
'_MyOtherClass__v': 2,
'_MyOtherClass__w': 4}/<code>

我們可以從基類和派生類中調用方法:

<code>>>> d.f('some-argument')
instance method f called
instance: <__main__.myotherclass object="" at="">
instance attributes:
{'x': 8,
'_y': 16,
'_MyClass__z': 32,
'_MyOtherClass__u': 1,
'_MyOtherClass__v': 2,
'_MyOtherClass__w': 4}
class: <class>
arg: some-argument
>>> d.f_('some-argument')
instance method f_ called
instance: <__main__.myotherclass object="" at="">
instance attributes:
{'x': 8,
'_y': 16,
'_MyClass__z': 32,
'_MyOtherClass__u': 1,
'_MyOtherClass__v': 2,
'_MyOtherClass__w': 4}
class: <class>
arg: some-argument/<class>/<class>/<code>

但是,如果派生類包含與其基類同名的成員,則派生類的成員具有優先權。

結論

面向對象的編程是Python提供的編程範例之一。進行適當的抽象並表示實際行為可能非常有用。但是,有時它可能違反直覺,並給開發過程帶來不必要的開銷。

本文說明了如何使用Python類和製作基本的面向對象程序。有關Python中的類和麵向對象編程的更多信息,例如:

  • 方法.__ repr __()和.__ str __()
  • 方法.__ new __()
  • 經營者
  • 方法.__ getattribute __(),.__ getattr __(),.__ setattr __()和.__ delattr __()
  • 發電機
  • 可調用性
  • 創建序列
  • 描述符
  • 上下文管理器
  • 抽象類和成員
  • 多重繼承
  • 使用super()
  • 複製中
  • 酸洗
  • 插槽
  • 類裝飾器
  • 數據類別甚至更多

面向對象編程無疑是當今最受歡迎的方法之一。如果有人想成為Python開發人員,則值得學習。但是請記住,Python支持其他編程範例,例如過程和函數,在某些情況下可能更合適。


分享到:


相關文章: