У меня есть класс A, и я хочу класс B с точно такими же возможностями. Я не могу или не хочу наследовать от B, например, делать класс B (A): pass Тем не менее, я хочу, чтобы B был идентичен A, но имел другой i: id (A)! = Id (B) Осторожно, я говорю не об экземплярах, а о классах, которые нужно клонировать.
Я почти уверен, что все, что вы пытаетесь сделать, может быть решено лучше, но вот кое-что, что дает вам клон класса с новым идентификатором:
def c(): class Clone(object): pass return Clone c1 = c() c2 = c() print id(c1) print id(c2)
дает:
4303713312 4303831072
Полагаю, это не то, что вы хотели, а то, о чем, кажется, спрашивает вопрос ...
class Foo(object): def bar(self): return "BAR!" cls = type("Bar", (object,), dict(Foo.__dict__)) print cls x = cls() print x.bar()
Может быть, я неправильно понял ваш вопрос, но как насчет упаковки A в B?
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)
Вы можете клонировать класс с помощью наследования. В противном случае вы просто передаете ссылку на сам класс (а не ссылку на экземпляр класса). Почему вы хотите дублировать класс в любом случае? Понятно, почему вы хотите создать несколько экземпляров класса, но я не могу понять, почему вы захотите дублировать класс. Кроме того, вы можете просто скопировать и вставить с новым именем класса ...