2013-10-29 41 views

回答

2

這是不可能列出所有在所有情形下可靠地屬性,該屬性可以在運行時使用__getattr____getattribute__定義一個簡單的事實。

例如,以下職業有50%的機會創建一個新屬性或提高AttributeError

import random 

class AttributeGenerator(object): 
    def __getattr__(self, attr): 
     if random.random() < 0.5: 
      setattr(self, attr, None) 
      return getattr(self, attr) 
     else: 
      raise AttributeError(attr) 

唯一的通用功能,從一個實例得到的屬性是dir()vars()

注意dir()默認組合由__dict____slots__得到的結果和類__dict__等類可以重新定義如何在他們的情況下dir()作品通過定義__dir__方法,但是我從來沒有見過它用。 如果此方法存在,你可以簡單地做「隱藏」了一些因爲某些原因屬性 類似:

attributes = list(object.__dict__.keys()) + list(obj.__slots__) + list(type(obj).__dict__) 

(用適當的錯誤檢查!),以獲取默認的dir()輸出。


這就是說,如果您對某個特定的庫感興趣,那麼可能會有一些特定於該庫的方法可靠工作。

1
import pprint from pprint 
pprint (vars(<object name>)) 
+0

謝謝Monty。但是,不可迭代的屬性不會暴露在'vars()'中。 – dotancohen