2009-07-31 43 views
13

Tôi có lớp SomeClass với các thuộc tính. Ví dụ idname:Cách liệt kê tất cả các thuộc tính của lớp

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) 

cách dễ nhất để tính liệt kê là gì? Tôi cần điều này để tuần tự hóa.

Trả lời

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

Rất đẹp. Cảm ơn bạn. – zinovii

+0

Than ôi, điều này sẽ bỏ lỡ các thuộc tính kế thừa ...! –

+0

Tôi đã thử điều này và nó hoạt động tốt cho các lớp thừa hưởng cũng. – zinovii

20
import inspect 

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

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

inspect.getmembers được các thành viên được thừa hưởng cũng như (và lựa chọn các thành viên của một vị ngữ, ở đây chúng tôi mã isprop vì nó không nằm trong số nhiều những người được xác định trước trong mô-đun inspect, bạn cũng có thể sử dụng một lambda, tất nhiên, nếu bạn thích).

+0

Điều này cũng hoạt động. Cảm ơn bạn – zinovii

Các vấn đề liên quan