issubclass和isinstance 反射 内置方法(魔术方法)
生活随笔
收集整理的這篇文章主要介紹了
issubclass和isinstance 反射 内置方法(魔术方法)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
- issubclass 和 isinstance
- issubclass
- isinstance
- 反射
- 通過用戶輸入的key,value往對象中賦值
- 動態的往對象中放方法
- 動態的刪除屬性
- 動態刪除對象中的屬性
- 刪除對象中屬性名為name字符串的屬性
- 反射:通過=字符串=來獲取,設置,刪除對象中的屬性或方法
- 寫的時候想起之前的內容
- 例子(還是上面的四個方法,hasattr(),setattr(),getattr(),delattr())
- 點攔截方法, setattr,delattr,getattr
- 原來的字典使用方式
- __item__系列 對象通過[]中括號取值,賦值,刪除值得時候,會自動調用
- call 對象加括號會調用它
- enter 和 __exit 我們所使用的就是 with open
issubclass 和 isinstance
issubclass
判斷一個類是不是另一個類子類
class Foo:passclass Bar:passclass T(Foo, Bar):passprint(issubclass(T, Bar))isinstance
判斷第一個是不是第二個的參數生成的對象
class Foo:passclass Bar:passa = Foo() print(isinstance(a, Foo)) print(isinstance(a, Bar))反射
1.用戶輸入一段字符串,執行該字符串對應的方法
hasattr():判斷字符串在對象里面是否有,返回值是布爾類型
getatter():把字符串對應的屬性或者方法拿出來
setatter():向對象中添加一個和字符串一樣名字的方法或者屬性
delatter():通過字符串來刪除屬性或方法
class Foo:
def run(self):
print("run......")
通過用戶輸入的key,value往對象中賦值
key = input("key:") value = input("value:") setattr(Foo, key, value) print(p.age)動態的往對象中放方法
def eat():print('eat...')# return eat()setattr(p,'eat222',eat)s = p.eat222s()print(s)動態的刪除屬性
# 原始的刪除方法p.name = 'xc'print(p.__dict__)del p.nameprint(p.__dict__)動態刪除對象中的屬性
choice = input("請輸入需要刪除的功能:")p.name = 'xc'p.age = 18print(p.__dict__)delattr(p, choice)print(p.__dict__)刪除對象中屬性名為name字符串的屬性
class Foo:def __init__(self, name, age):self.name = nameself.age = agedef run(self):print("run...")p = Foo('xc', 123)cmd = 'name'if hasattr(p, cmd):print("存在")print(p.__dict__)delattr(p, cmd)print(p.__dict__)else:print("不存在")反射:通過=字符串=來獲取,設置,刪除對象中的屬性或方法
寫的時候想起之前的內容
class A:passclass B(A):passclass X(B):def __init__(self, name, age):self.name = nameself.age = agedef run(self):print("run...")p = X('xc', 12)print(p.__dict__) # 打印類中所有的屬性print(X.__bases__) # 只打印父類print(X.mro()) # 打印所有的父類,即分類以上的,并且查找順序嚴格按照mro的順序來例子(還是上面的四個方法,hasattr(),setattr(),getattr(),delattr())
class BlackMedium:feature = "ugly"def __init__(self, name, addr):self.name = nameself.addr = addrdef sell_house(self):print("最怕中介買房子,自己還是傻逼")def rent_house(self):print("最怕中介租房子,自己還是傻逼")b1 = BlackMedium('東方明珠', '上海') print(b1.__dict__)a = 'sell_house' getattr(b1, a)()# 刪除屬性或者方法 delattr(b1, 'name') print(b1.__dict__)# 模塊也是對象,也可以使用四個方法 import osprint(hasattr(os, 'path1')) # False- 使用自己寫的模塊,通過反射來獲取模塊中是否有我要使用的屬性或方法,若果有就執行,沒有就報錯
類似于 hasattr(模塊名/文件名,變量名/方法名-->要使用字符串形式)
- 內置方法(就是重寫一些方法,更改返回值)
- init :格式化屬性
- str :給類添加返回值,也就是可以使用print打印類,返回的不再是內存地址
- repr :和str類似,不過是在交互式命令下直接寫變量名,會執行__repr__
點攔截方法, setattr,delattr,getattr
- 如果去對象中取屬性,一旦取不到,會進入到__getattr__
- 如果刪除對象中的屬性,就會進入__delattr__
- 如果去給對象中的屬性賦值,就會進入到__setattr__
- 并且都不會改變原有的值,就是不執行原來的語句,轉來執行自身定義的里面的代碼
原來的字典使用方式
- dict
__item__系列 對象通過[]中括號取值,賦值,刪除值得時候,會自動調用
call 對象加括號會調用它
enter 和 __exit 我們所使用的就是 with open
- 上下文管理器.
轉載于:https://www.cnblogs.com/xiongchao0823/p/11448938.html
總結
以上是生活随笔為你收集整理的issubclass和isinstance 反射 内置方法(魔术方法)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python单例设计模式
- 下一篇: 【自定义注解使用】增加service层方