Python:通过属性名称获取静态属性

发布于 2024-10-29 06:04:04 字数 401 浏览 0 评论 0原文

我有一个通过元类“模拟”静态属性的 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 的实例。

非常感谢,

奥瓦内斯

I have a python class with "emulated" static properties via a metaclass:

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

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


class My: __metaclass__ = MyMeta

Now some of my functions receives the property name as a string, which should be retrieved from My.

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

The point here is that I don't want an instance of My to be created.

Many thanks,

Ovanes

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

格子衫的從容 2024-11-05 06:04:04

你可以使用

getattr(My,name)

You could use

getattr(My,name)
仙女山的月亮 2024-11-05 06:04:04

我最近在看这个。我希望能够编写 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 实例。

I was looking at this recently. I wanted to be able to write Test.Fu where Fu is a computed property.

The following works using a descriptor object:

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

Note that there is an instance of Test allocated behind the scenes.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文