Как вы клонируете класс в Python? - PullRequest
6 голосов
/ 19 декабря 2009

У меня есть класс A, и я хочу класс B с точно такими же возможностями. Я не могу или не хочу наследовать от B, например, делать класс B (A): pass Тем не менее, я хочу, чтобы B был идентичен A, но имел другой i: id (A)! = Id (B) Осторожно, я говорю не об экземплярах, а о классах, которые нужно клонировать.

Ответы [ 4 ]

13 голосов
/ 19 декабря 2009

Я почти уверен, что все, что вы пытаетесь сделать, может быть решено лучше, но вот кое-что, что дает вам клон класса с новым идентификатором:

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

    return Clone

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

дает:

4303713312
4303831072
7 голосов
/ 19 декабря 2009

Полагаю, это не то, что вы хотели, а то, о чем, кажется, спрашивает вопрос ...

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

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

print cls

x = cls()
print x.bar()
0 голосов
/ 19 декабря 2009

Может быть, я неправильно понял ваш вопрос, но как насчет упаковки 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)
0 голосов
/ 19 декабря 2009

Вы можете клонировать класс с помощью наследования. В противном случае вы просто передаете ссылку на сам класс (а не ссылку на экземпляр класса). Почему вы хотите дублировать класс в любом случае? Понятно, почему вы хотите создать несколько экземпляров класса, но я не могу понять, почему вы захотите дублировать класс. Кроме того, вы можете просто скопировать и вставить с новым именем класса ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...