【发布时间】:2019-03-30 23:08:12
【问题描述】:
我正在寻找一种在 python 中有条件地定义属性的方法。 这个想法是在 try/except 块中定义属性
class PyObject(SomeOtherObj):
def __init__(self, dbaObj):
super(SomeOtherObj, self).__init__()
self._CreateAttributes()
def _CreateAttributes(self):
try:
self.GetProperty("MyProperty") #This method comes from the parent
except:
pass
else:
@property
def MyProperty(self):
return self.GetProperty("MyProperty")
@MyProperty.setter
def MyProperty(self, value):
return self.ModifyProperty("MyProperty", value) #This method comes from the parent
我不知道在父对象中定义了哪些属性,因此我需要有条件地构建属性的东西。也欢迎任何其他解决方案。
[编辑] 另一个尝试...但是不仅属性被创建,而且尝试访问它会引发无限递归错误
class PyObject(SomeOtherObj):
def __init__(self, dbaObj):
super(SomeOtherObj, self).__init__()
@property
def MyProperty(self):
try:
return self.GetProperty("MyProperty")
except:
del self.MyProperty
@MyProperty.setter
def MyProperty(self, value):
return self.ModifyProperty("MyProperty", value) #This method comes from the parent
@MyProperty.deleter
def MyProperty(self):
self.__delattr__(self.MyProperty)
[EDIT2] 我在父级中有一个方法,可以让我知道哪些是属性。为了这个例子,假设我在SomeOtherObj C++ 类中有一个方法ListAttributes,它返回由父类动态创建的属性名称(字符串)列表。
【问题讨论】:
-
"我不知道父对象内部定义了哪些属性" => 这怎么可能?您只需要阅读父类的文档(或只是源代码)。
-
这是一个 C++ 工厂,它根据变量输入启动其他 C++ 对象...我对它没有太多控制权。但是我认为这与我的问题无关(这也可能具有理论意义)
-
好吧,有道理。
标签: python oop properties