2009-07-31 3 views
13

Bazı özelliklere sahip sınıfım var. Örneğin id ve name için:Tüm sınıf özelliklerini listeleme

class SomeClass(object): 
    def __init__(self): 
     self.__id = None 
     self.__name = None 

    def get_id(self): 
     return self.__id 

    def set_id(self, value): 
     self.__id = value 

    def get_name(self): 
     return self.__name 

    def set_name(self, value): 
     self.__name = value 

    id = property(get_id, set_id) 
    name = property(get_name, set_name) 

özelliklerini listelemek için en kolay yolu nedir? Serileştirme için buna ihtiyacım var. o modül inspect birçok önceden tanımlanmış olanlar arasında değil çünkü

cevap

22
property_names=[p for p in dir(SomeClass) if isinstance(getattr(SomeClass,p),property)] 
+0

Çok güzel. Teşekkür ederim. – zinovii

+0

Ne yazık ki, bu kalıtsal özellikleri özleyecektir ...! –

+0

Bunu denedim ve miras kalan sınıflar için de iyi çalışıyor. – zinovii

20
import inspect 

def isprop(v): 
    return isinstance(v, property) 

propnames = [name for (name, value) in inspect.getmembers(SomeClass, isprop)] 

inspect.getmembers yanı kalıtsal üyelerini alır (ve bir yüklemi göre üyelere seçer, işte isprop kodlu; ayrıca tabii ki, bir lambda kullanabilirsiniz, Eğer tercih edersen).

+0

Bu da işe yarıyor. teşekkür ederim – zinovii