【发布时间】:2012-02-05 05:02:42
【问题描述】:
在 Python 中处理类(嵌套等)看起来并不容易,令人惊讶地!我最近出现了以下问题,花了几个小时(尝试,搜索......)但没有成功。我阅读了大多数与 SO 相关的链接,但没有一个指出这里提出的问题!
#------------------------------------------------ A类: def __init__(self): self.a = 'a' 打印自我.a B(A)类: def __init__(self): 自我.b = 'b' A.a = 'a_b' 打印 self.b, A.a #------------------------------------------------ C类: A类: def __init__(self): self.a = 'a' 打印自我.a B(A)类: def __init__(self): 自我.b = 'b' A.a = 'a_b' 打印 self.b, A.a #------------------------------------------------ #------------------------------------------------ >>> c1 = A() 一种 >>> c1.a '一种' >>> c2 = B() b >>> c2.a, c2.b ('a_b', 'b') >>> c3 = C() >>> c4 = c3.A() 一种 >>> c4.a '一种' >>> c5 = c3.B() b a_b >>> c5.b 'b' >>> c5.a 回溯(最近一次通话最后): 文件“”,第 1 行,在 AttributeError:B 实例没有属性“a”代码的问题在哪里?
与
在这两种情况下,似乎当 B(A) 被初始化时,A() 都没有被初始化。这个问题的解决方案是什么?请注意,在 B() 的 __init__() 中调用的术语 A.__init__() 不起作用!
更新:
几何类: 类曲线: def __init__(self,c=1): self.c = c #曲率参数 打印'曲率%g'%self.c 通过#一些代码 类线(曲线): def __init__(self): Geometry.Curve.__init__(self,0) #关键点 通过#一些代码 g = 几何() C = g.Curve(0.5) L = g.Line()导致:
曲率 0.5 曲率 0我在寻找什么。
【问题讨论】:
-
"...
A.__init__()在 B() 的__init__()中被调用不起作用!"图片或它没有发生。 -
同上。你在
B.__init__()中拨打A.__init__()的感觉如何? -
@IgnacioVazquez-Abrams 现在找到了问题的解决方案。几个小时后就很棒了。您可以在问题的更新部分找到您的观点。
-
@soulcheck 请参阅我上面对 Ignacio Vazquez-Abrams 的评论。
-
@Supporter 如果您只是创建了一个名为“geometry”的模块而不是外部 Geometry 类,那将会简单得多。然后你得到完全相同的分组,但没有嵌套类的复杂性:
import geometry as gc = g.Curve(0.5)l = g.Line()
标签: python class nested-class