2011-04-01 1 views
2

У меня есть класс питона с «эмулировать» статические свойствами с помощью метакласса:Python: Получение статических свойств с помощью имени свойства

class MyMeta(type): 
    @property 
    def x(self): return 'abc' 

    @property 
    def y(self): return 'xyz' 


class My: __metaclass__ = MyMeta 

Теперь некоторые из моих функций получает имя свойства в виде строки, которая должна быть извлечен из My.

def property_value(name): 
    return My.???how to call property specified in name??? 

Дело в том, что я не хочу, чтобы экземпляр My был создан.

Большое спасибо,

Ованес

ответ

3

Вы можете использовать

getattr(My,name) 
+0

Спасибо, что я был уверен, что попробовал и получил исключение. Но я попробовал еще раз, и он работает ... Спасибо большое! – ovanes

0

Я смотрел на это в последнее время. Я хотел иметь возможность написать Test.Fu, где Fu - вычисленное свойство.

следующие работы с использованием объекта дескриптора:

class DeclareStaticProperty(object): 
    def __init__(self, method): 
     self.method = method 
    def __get__(self, instance, owner): 
     return self.method(owner()) 

class Test(object): 
    def GetFu(self): 
     return 42 
    Fu = DeclareStaticProperty(GetFu) 

print Test.Fu # outputs 42 

Обратите внимание, что есть экземпляр Test выделяется за кулисами.