Python: получение статических свойств через имя свойства - PullRequest
2 голосов
/ 01 апреля 2011

У меня есть класс 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 создавался.

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

Ovanes

Ответы [ 2 ]

3 голосов
/ 01 апреля 2011

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

getattr(My,name)
0 голосов
/ 17 июля 2012

Я смотрел на это недавно.Я хотел иметь возможность написать 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.

...