- 此问题在此处已有答案**:
python How to create private class variables using setattr or exec?(3个答案)
3天前关闭。
我正在尝试创建一个类Customer,它从sqlalchemy查询对象创建它的属性。
data = {'Name':'John Doe','Age':67} #in the real code , data is a not a dictionary but an object.
class Customer:
def __init__(self,data) -> None:
assert type(data) == Customers
for key in data.keys():
exec(f"self.__{key[1:] if key.startswith('_') else key} = data['{key}']",{'self':self,'data':data})
@property
def name(self):
return self.__Name
data['bank'] = green
person = Customer(data)
我能够将Customer属性作为公共属性进行访问:print(person.__Name)
它会输出John Doe
但是当我尝试通过name方法访问该属性时,如下所示:print(person.name)
它会引发错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Users\HP\PyProject\FlaskProject\green\bank\modelx.py", line 66, in name
return self.__Name
AttributeError: 'Customer' object has no attribute '_Customer__Name'
如何使exec函数中创建的类属性作为类的私有属性而不是公共属性。
1条答案
按热度按时间jyztefdp1#
这里不需要
exec
。使用setattr
。此外,请使用
isinstance
,而不要使用类型比较。尽管在您示例中,
data
* 不是 *Customers
的示例;它是传递给Customer.__init__
的普通dict
。