繼承指的是子類可以繼承父類的資源,在Python中支持多繼承,也就是說一個兒子可以有多個爸爸
1、繼承
在Python中繼承顯得十分的簡潔,如果一個類繼承自另一個類,只需將父類放到小括號中添加到子類類名後面即可,多個父類用半角逗號隔開
#基類
class Animal:
def __init__(self, name): #構造器
self.name = name
def eat(self):
print("%s 吃東西" %self.name)
def drink(self):
print("%s 喝水" %self.name)
#子類
class Dog(Animal): #Dog類繼承自Animal類,python支持多繼承,多個父類用逗號隔開
def __init__(self, name): #構造器
super().__init__(name) #調用父類的構造器
def eat(self): #重寫父類的eat方法
print("%s 啃骨頭" %self.name)
d = Dog("金毛")
d.drink()
d.eat()
2、常用的函數
#常用的BIF
print(d.__dict__) #查看對象所擁有的屬性
result = issubclass(Dog, Animal) #判斷一個類是否是另一個類的子類
print(result)
result = isinstance(d, Dog) #判斷一個實例對象是否屬於一個類
print(result)
result = hasattr(d, 'name') #判斷一個實例對象中是否有某個屬性
print(result)
result = getattr(d, "name", "訪問的參數不存在") #獲取實例對象的屬性值,如果不存在就賦默認值
print(result)
setattr(d, "name", "一隻流浪狗") #給實例對象的屬性賦值
print(getattr(d, "name"))
#delattr(d, "name") #刪除實例對象的屬性
3、常用的魔法方法
3.1、__new__()
作用是實例化對象時被回調的方法,優先級高於構造方法,__new__()方法要求返回一個對象的實例
#魔法方法:__new__()
class CapStr(str): #繼承自字符串類
def __new__(cls, something): #__new__()函數,當類被實例化時調用,優先於構造函數
something = something.upper()
return str.__new__(cls, something)
result = CapStr("i love u")
print(result)
3.2、__del__()
析構函數,和構造函數是對立的,也就是當對象被銷燬時回調析構函數
#魔法方法:__del__()
class life:
def __init__(self): #構造函數
print("__init__")
def __del__(self): #析構函數
print("__del__")
l = life()
del l
3.3、__init()__
構造函數,一般用於初始化成員變量