问一下
Topic source小白,如果有错请大佬纠正赐教。setattr可以进行更好的对向间的交互。
用这章例子打个比方:我有Cat类,有Dog类,现在我有一个husky的Dog和一个maine的Cat,我突然想不开,想把maine的“cat is running”的(猫的)run给我的husky。我可以getattr去拿maine的run方法,然后再setattr给husky的(狗的)run。这里就得用setattr,因为不能直接赋值给function call。
可以用getattr方法得到类中的函数,并赋值给一个变量名
再创建另一个类的变量名,把这个变量名赋值给它
例如:
class a:
def q(self):
pass
class b:
pass
m=getattr(a,'q')
b.q=m
此时b中也有了a中的q函数
不只是名字或者功能相同,(就算是名字不同也无所谓)a中的q和b中的q就完完全全是同一个函数,当然了,和m也指向同一个函数
用setattr(b,'q',m) 这种方法也一样,此时的b.q和a.q和m都是同一个函数
我们不用取出一个类中函数中的(功能)内容赋给另一个类中的函数调用,只需要把函数名赋值给另一个函数名就可以了
搬运一下我的百度搜索内容
效果其实是一样的。比如object.a = 1
最终也是调用self.__setattr__('a', 1)
;
只不过如果你自己重写父类(object)的__setattr__方法时,在此基础上可以加上自己定义的一些规则
>>> setattr.__doc__
"Sets the named attribute on the given object to the specified value.\n\nsetattr(x, 'y', v) is equivalent to ``x.y = v''"
所以,没区别。
- 1
新域街85号
setattr(obj, 'y', 19) 和 obj.y = 19直接实际上赋值有什么区别呢?