我试图在我的代码中实现良好的面向对象编程(oop)行为,想知道以下内容:
通常我有这样一种类设计:
class MyClass():
def __init__(self,arg1):
self.arg1 = arg1
@property
def arg1(self):
return _arg1
@arg1.setter
def arg1(self, value):
self._arg1 = value
如果我现在编写一个函数,其中包含一个字典,并且使用该字典来设置类属性:
def set_my_dict(self):
argdict = {'arg1':4}
for k, v in argdict:
setattr(self, k, v)
在这种情况下,这个 setattr
调用是否会调用setter函数并进行可能的类型检查等操作呢?
setattr(self, "k", v)
的语义与self.k = v
相同。 - chepner