首先,我知道下面的代码是荒谬的,可以是一个简单的循环,但我想了解是否/如何在嵌套类中做一些事情:
class OuterClass(object):
counter = 0 # Class variable
def __init__(self, v):
super(OuterClass, self).__init__()
self.values = v # Instance variable
self.run()
def run(self):
for v in values:
self.NestedClass(v) # can I bound a nested class to the outer?
print self.NestedClass.size
class NestedClass(object):
size = 0 # Nested Class variable
def __init__(self, value):
super(NestedClass, self).__init__() # NameError: global name 'NestedClass' is not defined
NestedClass.size += 1 # Nested Instance variable
我的目的是为每个OuterClass实例创建一个NestedClass类。 所以我希望每个OuterClass实例的size
都不同。
如何修复最后两行:
super(NestedClass, self).__init__()
NestedClass.size += 1
self.NestedClass.size
,它会尝试在自己内部找到一个NestedClass并抛出错误。OuterClass.NestedClass.size
它将绑定到外部类,并且大小将是OuterClass实例中的相同对象(我不想这样)。OuterClass.self.NestedClass.size
AttributeError: type object 'OuterClass' has no attribute 'self'
答案 0 :(得分:0)
... OuterClass实例中的大小将是同一个对象(我不想这样)。
只要size
是NestedClass
的类成员,它只存在一次。这是因为只有一个类NestedClass
,而size
是该类的成员。
如果您希望每个实例都有一个size
成员,那么,那个实例成员是...
答案 1 :(得分:0)
如果您执行以下操作:
>>> class Outter:
... class Inner:
... nb = 0
... def __init__(self):
... Outter.Inner.nb += 1
... def test(self):
... t = self.Inner()
... print(t.nb)
...
>>> o = Outter()
>>> o.test()
1
>>> o.test()
2
>>> o.test()
3
您正在创建一个类变量,该变量将绑定到类Outter.Inner
和
每次修改它时,它都会更改该类的所有实例。
我的目的是为每个OuterClass实例创建一个NestedClass类。所以我希望每个OuterClass实例的大小都不同。
如果您希望该变量依赖于每个Outter
实例,则需要
在Outter
上创建对Inner
的反思:
>>> class Outter:
... def __init__(self):
... self.nb = 0
... class Inner:
... def __init__(self, o):
... o.nb += 1
... def test(self):
... t = self.Inner(self)
... print(self.nb)
...
>>> o = Outter()
>>> o.test()
1
>>> o.test()
2
>>> o.test()
3
>>> o2 = Outter()
>>> o2.test()
1
>>> o2.test()
2
>>> o2.test()
3
>>>
这种方式变量是每个Outter
实例的实例成员,并进行了修改
每个Inner
个实例。