Python自复制类

时间:2015-03-03 20:39:54

标签: python class object initialization metaclass

我正忙着让一个类重新创建自己。我试图了解元类属性,但我仍然不是100%清楚。

目标: 一个为某些迭代创建自己的类,然后保存它创建的第一个子级(在下面的例子中,它是self.children中的一个对象)。

class MyClass(object):

    def __init__(self, num):

        self.name = num
        self.children = []

        if num !=0:
            cls = self.__new__(self.__class__ )
            cls = self.__init__(num-1)
            self.children.append(cls)

            #Uncomment for Error
            #print cls.name


if __name__ == "__main__":
    c = MyClass(3)

这就是我正在尝试但尝试打印新对象的self.name会返回一个“name”不存在的类型AttributeError。我认为这是因为我没有通过属性的字面,但我正在寻找一些最佳实践的澄清,也许是一个解决方案。

如果我不清楚某事,请告诉我,以便我能更好地解释!

2 个答案:

答案 0 :(得分:1)

您无需亲自调用__new__()__init__()方法;构造函数将自动处理该部分。

class MyClass(object):
    def __init__(self, num):
        self.name = num
        self.children = []

        if num !=0:
            cls = self.__class__(num-1)
            self.children.append(cls)
            print cls.name

答案 1 :(得分:0)

怎么样:

class MyClass(object):

    def __init__(self, num):
        self.name = num
        self.children = []

        if num != 0:
            self.children.append(self.__class__(num - 1))

if __name__=="__main__":
    c = MyClass(3)