如何创建一个名为字符串的属性?

2024-04-24 19:05:48 发布

您现在位置:Python中文网/ 问答频道 /正文

使用Python我想在类中创建一个属性,但是它的名称是字符串。通常你会:

blah = property(get_blah, set_blah, del_blah, "bleh blih")

其中get_u、set_u和del_blah已相应定义。我尝试过对变量中的属性名执行相同的操作,如下所示:

^{pr2}$

但那不管用。第一种情况下blah返回属性的值,在第二种情况下,它返回一个属性,即<property object at 0xbb1aa0>。我该如何定义它才能工作?在


Tags: 字符串名称get属性定义object情况property
3条回答

一种方法是写入locals():

class X:
    for attr in ["a","b","c"]:
        def getter(self, name=attr):
            return name+"_value"
        locals()[attr] = property(getter, None, None, attr)

x = X()
print x.a
print x.b
print x.c

给予

^{pr2}$

如果我理解您要做什么,您可以通过重写类的getattrsetattr方法来完成。在

例如:

class Something(object):
    def __getattr__(self, name):
        # The name of the property retrieved is a string called name
        return "You're getting %s" % name

something = Something()

print something.foo
print something.bar

将打印:

^{pr2}$

这样,您就可以拥有一个通用的getter和setter,它在字符串中具有属性的名称,并相应地对其进行处理。在

正如我想说的,区别在于,在第一个版本中,您将类属性blah更改为result-of-property,而在第二个版本中,您在实例中设置它(这是不同的!)。在

这个版本怎么样:

setattr(MyClass, "blah", property(self.get_blah, self.set_blah,
        self.del_blah, "bleh blih"))

您也可以这样做:

^{pr2}$

相关问题 更多 >