日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

继续获取对象和方法

發(fā)布時(shí)間:2023/12/20 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 继续获取对象和方法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

通過dir獲取對象所有屬性和方法:

>>> dir('ABC') ['__add__', '__class__', '__contains__', '__delattr__', '__dir__','__doc__', '__eq__', '__format__', '__ge__', '__getattribute__','__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__','__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__','__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable','isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower','lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex','rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill'] 復(fù)制代碼

以上可以看到__xxx__的屬性和方法在python中有特殊的用途,比如__len__返回對象的長度。 在調(diào)用len()獲取對象的長度的時(shí)候,實(shí)際上它是自動去調(diào)用該對象的__len__()方法。

使用len() 和__len__()是相同的:

>>> len('ABC') 3 >>> 'ABC'.__len__() 3 復(fù)制代碼

自己寫類,也想使用len(myObject),可以自己寫一個__len__()方法:

>>> class MyDog(object): ... def __len__(self): ... return 100 ... >>> dog = MyDog() >>> len(dog) 100 復(fù)制代碼

getattr(),setattr()和hasattr()操作對象的屬性值:

>>> class MyObject(object): ... def __init__(self): ... self.x = 9 ... def power(self): ... return self.x * self.x ... >>> obj = MyObject() >>> hasattr(obj, 'x') #是否有屬性‘x’ True >>> obj.x 9 >>> hasattr(obj, 'y') #是否有屬性‘y’ False >>> setattr(obj, 'y', 19) >>> hasattr(obj, 'y') True >>> getattr(obj, 'y') #獲取屬性‘y’值 19 >>> obj.y #獲取屬性‘y’值 19 >>> 復(fù)制代碼

獲取不存在的屬性會報(bào)錯:

>>> getattr(obj, 'z') Traceback (most recent call last):File "<stdin>", line 1, in <module> AttributeError: 'MyObject' object has no attribute 'z' >>> 復(fù)制代碼

當(dāng)獲取不存在的屬性時(shí),就輸出一個值:

>>> getattr(obj, 'z', 404) 404 復(fù)制代碼

也可以獲取方法:

>>> hasattr(obj, 'power') #是否有 power方法 True >>> getattr(obj, 'power') #是否有 power屬性 <bound method MyObject.power of <__main__.MyObject object at 0x000001D044B06518>> >>> fn = getattr(obj, 'power') #將power 屬性值賦值給fn >>> fn #fn指向obj.power <bound method MyObject.power of <__main__.MyObject object at 0x000001D044B06518>> >>> fn() #調(diào)用fn() 相當(dāng)于調(diào)用 obj.power() 是一樣的 81 >>> 復(fù)制代碼

注意點(diǎn): 只有不知道對象的信息的時(shí)候,才需要獲取對象信息。如果我們可以直接寫:

sum = obj.x + obj.y 復(fù)制代碼

就不要寫成:

sum = getattr(obj, 'x') + getattr(obj, 'y') 復(fù)制代碼

總結(jié):

1、通過dir() 獲取對象的屬性和方法 2、通過setattr(),getattr(),hasattr() 改變,獲取,判斷 對象的屬性和方法復(fù)制代碼

轉(zhuǎn)載于:https://juejin.im/post/5ad8a27cf265da0ba2668576

總結(jié)

以上是生活随笔為你收集整理的继续获取对象和方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。