Discuss / Python / 问一下

问一下

Topic source

setattr(obj, 'y', 19) 和 obj.y = 19直接实际上赋值有什么区别呢?

mf734

#2 Created at ... [Delete] [Delete and Lock User]

小白,如果有错请大佬纠正赐教。setattr可以进行更好的对向间的交互。

用这章例子打个比方:我有Cat类,有Dog类,现在我有一个husky的Dog和一个maine的Cat,我突然想不开,想把maine的“cat is running”的(猫的)run给我的husky。我可以getattr去拿maine的run方法,然后再setattr给husky的(狗的)run。这里就得用setattr,因为不能直接赋值给function call。

一盒噪噪

#3 Created at ... [Delete] [Delete and Lock User]

可以用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都是同一个函数

我们不用取出一个类中函数中的(功能)内容赋给另一个类中的函数调用,只需要把函数名赋值给另一个函数名就可以了


  • 1

Reply