2010-11-18 11 views

cevap

2

Dürüst olmak gerekirse, iç gözlemden başka neredeyse gerçek yaşam kullanımı yok. Çoğu durumda, inspect.getmembers daha iyi olacaktır (bir jeneratör olmasa da: eğer sınıflarınız bunlardan en az bir sorun olmak için yeterli öznitelikleri varsa)

Fark, inspect.gemembers sınıf ve örneğini alacağıdır öznitelikleri (ve miras zincirini sonuna kadar yapın), yalnızca örnek öznitelikleri instance.__dict__'da yaşıyor. Genelde

>>> class A(object): 
... a = 'a' 
... 
>>> a = A() 
>>> a.a 
'a' 
>>> a.__dict__ 
{} 
>>> a.b = 'b' 
>>> a.__dict__ 
{'b': 'b'} 
>>> import inspect 
>>> inspect.getmembers(a) 
[('__class__', <class '__main__.A'>), 
('__delattr__', <method-wrapper '__delattr__' of A object at 0xb774da8c>), 
('__dict__', {'b': 'b'}), ('__doc__', None), 
('__format__', <built-in method __format__ of A object at 0xb774da8c>), 
# Snipped for brevity 
# .... 
('__subclasshook__', <built-in method __subclasshook__ of type object at 0x87b172c>), 
('__weakref__', None), ('a', 'a'), ('b', 'b')] 

>>> list(a.__dict__.iteritems()) 
[('b', 'b')] 

, iteritems tuşa bakmak istiyorum oldukça kullanışlı zaman olduğunu kerede dizilerini bir liste haline genişleyen olmadan sözlükte değer girdileri. Bu özel sözlük çağrıldığında inanılmaz yararlı olmaz.

+0

Ben 'inceleme' hakkında bilmiyordum. :) –

İlgili konular