與java類似,繼承的出現是為了提高代碼的重復利用率,避免多次輸入同樣的代碼,而超類就是java中的父類,
1.繼承
要指定超類,可在定義類時,在class陳述句中的類名后加上超類名
- 基類就是超類,派生類就是子類
格式
class Dog: #
pass
class Bobo(Dog): # Dog類的子類
pass
子類會
- 重新定義重寫超類方法init
- 繼承超類的方法,無需再次撰寫
class Dog:
def __init__(self):
print('wang!!!')
def eat(self):
print('Dog is eating.')
class Bobo(Dog): # 繼承Dog
pass
tom = Bobo()
tom.eat()
>
wang!!!
Dog is eating.
在子類中進行重寫
class Dog:
def __init__(self):
print('wang!!!')
def eat(self):
print('Dog is eating.')
class Bobo(Dog):
def __init__(self):
print('Bobo is wang!')
def eat(self):
print('Bobo is eating.')
tom = Bobo()
tom.eat()
>
Bobo is wang!
Bobo is eating.
1.1查找一個類的子類和基類
issubclass
確定一個類是否是另一個類的子類
issubclass(Bobo, Dog) # 子類 超類
> True
issubclass(Dog, Bobo)
> False
- 已知一個類,想知道它的基類,訪問特殊屬性
__bases__
print(Bobo.__bases__)
> (<class '__main__.Dog'>,)
-
isinstance
確定創建的物件是否是特定類的實體創建子類的實體,這個物件同時也是其基類的實體
class Dog:
pass
class Bobo(Dog):
pass
tom = Bobo()
print(isinstance(tom, Bobo))
print(isinstance(tom, Dog))
>
True
True
- 使用屬性
__class__
可以知道該實體屬于哪個類
print(tom.__class__)
> <class '__main__.Bobo'>
1.2 多個超類
盡量避免使用
格式
class A:
pass
class B:
pass
class C(A, B): # 同時繼承A和B
pass
1.3介面
介面這一概念與多型相關,實際上,python中沒有與java相對應的介面,需要特定的模塊來實作
1.4 抽象基類
抽象類不能(不應該)被實體化,用于定義子類應該實作的一些抽象方法,
格式
from abc import ABC, abstractmethod
class 類名(ABC): # 繼承ABC類
@abstractmethod # 標記為抽象方法,在子類中必須實作
def 方法名(self):
pass
from abc import ABC, abstractmethod
class Dog(ABC):
@abstractmethod
def eat(self):
pass
class Bobo(Dog):
def eat(self):
print('eating.')
tom = Bobo()
tom.eat()
> eating.
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/557100.html
標籤:其他
上一篇:SpringMVC
下一篇:返回列表