我试图避免在两个类的克隆方法中重复相同的代码,一个从另一个继承。我目前的做法是将两个类通用的代码放在基类的(非静态)克隆方法中,并从扩展类中调用它。为此,我试图将扩展类的构造函数传递给基类,以便可以在那里调用它。下面是我目前在做什么一个简单的例子:如何将构造函数方法传递给另一个方法并在那里调用它?
class S(object):
"""Base class"""
def __init__(self):
self.a = 0
def clone(self, constructor=None):
if constructor is None:
constructor = self.__init__
cloned = constructor()
# Expecting: cloned.a = 1, cloned.b = 7
assert cloned is not None # raises AssertionError
cloned.a = self.a # Set a to 2
return cloned
class C(S):
"""Child class, extending Base"""
def __init__(self):
self.a = 1
self.b = 7
def clone(self):
cloned = super(C, self).clone(self.__init__)
# Expecting: cloned.a = 2, cloned.b = 7
cloned.b = self.b # Set b to 8
return cloned
if __name__ == '__main__':
c1 = C()
c1.a = 2
c1.a = 8
c2 = c1.clone()
我在这一点上的问题是:
为什么
None
调用基类的clone
方法时返回?为了使用它,我必须将该方法绑定到类上吗?使用
types.MethodType
或__get__
?作为更好的方法,你会有什么建议?
你知道'copy'模块吗? – 2012-07-23 14:12:36
@KarlKnechtel:是的,但是我做出了一些错误的假设,这让我相信它不足以满足我想要做的事情。事实证明,这是。 – EriF89 2012-07-24 07:40:09