2024-04-24 19:05:48 发布
网友
使用Python我想在类中创建一个属性,但是它的名称是字符串。通常你会:
blah = property(get_blah, set_blah, del_blah, "bleh blih")
其中get_u、set_u和del_blah已相应定义。我尝试过对变量中的属性名执行相同的操作,如下所示:
但那不管用。第一种情况下blah返回属性的值,在第二种情况下,它返回一个属性,即<property object at 0xbb1aa0>。我该如何定义它才能工作?在
<property object at 0xbb1aa0>
一种方法是写入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
给予
如果我理解您要做什么,您可以通过重写类的getattr和setattr方法来完成。在
例如:
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
将打印:
这样,您就可以拥有一个通用的getter和setter,它在字符串中具有属性的名称,并相应地对其进行处理。在
正如我想说的,区别在于,在第一个版本中,您将类属性blah更改为result-of-property,而在第二个版本中,您在实例中设置它(这是不同的!)。在
这个版本怎么样:
setattr(MyClass, "blah", property(self.get_blah, self.set_blah, self.del_blah, "bleh blih"))
您也可以这样做:
一种方法是写入locals():
给予
^{pr2}$如果我理解您要做什么,您可以通过重写类的getattr和setattr方法来完成。在
例如:
将打印:
^{pr2}$这样,您就可以拥有一个通用的getter和setter,它在字符串中具有属性的名称,并相应地对其进行处理。在
正如我想说的,区别在于,在第一个版本中,您将类属性blah更改为result-of-property,而在第二个版本中,您在实例中设置它(这是不同的!)。在
这个版本怎么样:
您也可以这样做:
^{pr2}$相关问题 更多 >
编程相关推荐