你如何在Python中克隆一个类?

时间:2009-12-19 18:45:47

标签: python

我有一个A类,我想要一个具有完全相同功能的B类。 我不能或不想从B继承,比如做B(A)类:传递 我仍然希望B与A相同,但有一个不同的i:id(A)!= id(B) 注意,我不是在谈论实例,而是要克隆的类。

4 个答案:

答案 0 :(得分:13)

我很确定你想要做的事情可以用更好的方式解决,但是这里有一些东西能让你克服一个带有新id的类:

def c():
    class Clone(object):
        pass

    return Clone

c1 = c()
c2 = c()
print id(c1)
print id(c2)

给出:

4303713312
4303831072

答案 1 :(得分:7)

我想这不是你想要的,但它的问题似乎要求......

class Foo(object):
    def bar(self):
        return "BAR!"

cls = type("Bar", (object,), dict(Foo.__dict__))

print cls

x = cls()
print x.bar()

答案 2 :(得分:0)

也许我误解了你的问题但是在B中包装A怎么样?

class A:

    def foo(self):
        print "A.foo"

class B:

    def __init__(self):
        self._i = A()

    def __getattr__(self, n):
        return getattr(self._i, n)

答案 3 :(得分:-1)

您可以通过继承克隆该类。否则,您只是传递对类本身的引用(而不是对类的实例的引用)。你为什么要复制课程呢?很明显,为什么你想创建类的多个实例,但我无法理解为什么你想要一个重复的类。此外,您只需复制并粘贴一个新的类名...