1. isinstance, type, issubclass isinstance: 判斷你給對象是否是xx類型的. (向上判斷 type: 返回xxx對象的數據類型 issubclass: 判斷xxx類是否xxx的子類 2. 如何區分方法和函數 在類中: 實例方法 如果是類名.方法 函數 如果是 ...
1. isinstance, type, issubclass
isinstance: 判斷你給對象是否是xx類型的. (向上判斷
type: 返回xxx對象的數據類型
issubclass: 判斷xxx類是否xxx的子類
class Animal: def eat(self): print("剛睡醒吃點兒東西") class Cat(Animal): def play(self): print("貓喜歡玩兒") c = Cat() print(isinstance(c, Cat)) # True print(isinstance(c, Animal)) # True a = Animal() print(isinstance(a, Cat)) # 不能向下判斷 False print(type(a)) # 返回 a的數據類型 print(type(c)) # 精準的告訴你這個對象的數據類型 # 判斷.xx類是否是xxxx類的子類 print(issubclass(Cat, Animal)) # True print(issubclass(Animal, Cat)) # False
2. 如何區分方法和函數
在類中:
實例方法
如果是類名.方法 函數
如果是對象.方法 方法
類方法: 都是方法
靜態方法: 都是函數
from types import MethodType, FunctionType
isinstance()
from types import FunctionType, MethodType # 引入方法和函數的模塊 class Person: def chi(self): # 實例方法 print("我要吃魚") @classmethod def he(cls): print("我是類方法") @staticmethod def pi(): print("你是真滴皮") p = Person() print(isinstance(Person.chi, FunctionType)) # True print(isinstance(p.chi, MethodType)) # True print(isinstance(p.he, MethodType)) # True print(isinstance(Person.he, MethodType)) # True print(isinstance(p.pi, FunctionType)) # True print(isinstance(Person.pi, FunctionType)) # True
3. 反射
一共就4個函數
attr: attribute
getattr()
從xxx對象中獲取到xxx屬性值
hasattr()
判斷xxx對象中是否有xxx屬性值
delattr()
從xxx對象中刪除xxx屬性
setattr()
設置xxx對象中的xxx屬性為xxxx值
class Person: def __init__(self, name,wife): self.name = name self.wife = wife p = Person("寶寶", "林志玲") print(hasattr(p, "wife")) print(getattr(p, "wife")) # p.wife setattr(p, "wife", "胡一菲") # p.wife = 胡一菲 setattr(p, "money", 100000) # p.money = 100000 print(p.wife) print(p.money) delattr(p, "wife") # 把對象中的xxx屬性移除. 並不是p.wife = None print(p.wife)