我想实现以下目标:
#!/usr/bin/python
class SuperHero(object):
def setName(self, name):
self.name = name
def getName(self):
return self.name
class SuperMan(SuperHero):
pass
if __name__ == "__main__":
sh = SuperHero()
sh.setName("Clark Kent")
sm = SuperMan(sh) # This does *not* work in real python
print sm.getName() # prints "Clark Kent"
我需要一个接一个地复制属性还是有更好的方法?在
我更喜欢显式的解决方案-一个一个地复制。}可能会增长,你可能不想复制它的所有内容(或者更糟的是,忘记这个事实,体验一些讨厌的副作用)。除了Python的禅说:
Martijn Pieters
的解决方案很好,但是随着时间的推移,你的{Explicit is better than implicit.
。旁注-你知道财产,对吗?因此,如果使用它们,代码可能更像Python:
添加跨
__dict__
属性进行复制的启动器函数:一个实例的
__dict__
包含所有实例属性,上面的只是将所有这些属性复制到新的SuperMan
实例中。演示:
^{pr2}$或者,对于更糟糕的黑客攻击,您可以交换class属性:
但这可能会导致更有趣的错误,因为您从未调用
SuperMan
初始值设定项,因此预期状态可能不正确。相关问题 更多 >
编程相关推荐