day 19 反射

楊洪濤發表於2018-12-24
1.isinstance, type, issubclass 的含義
isinstance:  判斷你給物件時候是xxx型別的.(向上判斷)
type: 返回xxx物件的資料型別
issubclass: 判斷xxx類是否xxx的子類
class Animal:
    def eat(self):
        print(“剛睡醒吃點兒東西”)
 
class Cat(Animal):
    def play(self):
        print(“貓喜歡玩兒”)
 
c = Cat()
 
print(isinstance(c, Cat)) # c是一隻貓
print(isinstance(c, Animal)) # 向上判斷
 
a = Animal()
print(isinstance(a, Cat)) # 不能向下判斷
 
print(type(a)) # 返回 a的資料型別
print(type([]))
print(type(c)) # 精準的告訴你這個物件的資料型別
 
# 判斷.xx類是否是xxxx類的子類
print(issubclass(Cat, Animal))
print(issubclass(Animal, Cat))
def cul(a, b): # 此函式用來計算數字a和數字b的相加的結果
    # 判斷傳遞進來的物件必須是數字. int float
    if (type(a) == int or type(a) == float) and (type(b) == int or type(b) == float):
        return a + b
    else:
        print(“對不起. 您提供的資料無法進行計算”)
 
print(cul(a, c))
2.如何區分方法和函式(程式碼)
  在類中:
         例項方法
               如果是類名.方法    == 是函式
               如果是物件.方法    == 是方法
from types import MethodType, FunctionType
3.反射(重要)
attr: attribute
getattr()
      從xxx物件中獲取xxx屬性
hasattr()
      判斷xxx隊形中是否有xxx屬性
delattr()
      從xxx物件中刪除xxx屬性
setattr()
      設定xxx物件中xxx屬性為xxxx值
class Person:
    def __init__(self, name, laopo):
        self.name = name
        self.laopo = laopo
 
 
p = Person(“寶寶”, “林志玲”)
 
print(hasattr(p, “laopo”)) #
print(getattr(p, “laopo”)) # p.laopo
 
setattr(p, “laopo”, “胡一菲”) # p.laopo = 胡一菲
setattr(p, “money”, 100000000000) # p.money = 100000000
 
print(p.laopo)
print(p.money)
 
delattr(p, “laopo”) # 把物件中的xxx屬性移除.  != p.laopo = None
print(p.laopo)
 

相關文章