我设法定义一个类A,使用另一个类B的实例列表作为类A的实例变量。B类具有更改A类的另一个实例变量a1的功能。类A还具有更改类B的实例变量bb的功能。因此,A类可以访问B类,而B类可以访问A类。这两个类嵌套在一起。我知道我们可以简化将B类的所有实例变量和函数更改为A类的事情。但是在我的项目中,这种嵌套结构才是真正的东西。
class A: class B: count = 0 def __init__(self,b1=None,b2=None): self.b1 = b1 self.b2 = b2 def funcb(self,bb): A.a1 = pyfunc1(bb) def __init__(self,a1,a2): self.a1 = a1 self.a2 = a2 self.listb = [A.B()] def funca(self,aa): A.B.count += 1 b = A.B(self.a1,self.a2) listb.append(b) listb[A.B.count].b1 = listb[A.B.count-1].b1.pyfunc2(aa) listb[A.B.count].b2 = pyfunc3(aa,self.a2) listb[A.B.count].funcb(self.a2)
我想知道的是,这种嵌套类是否会降低python的效率?有更好的解决方案吗?
嵌套类不会降低也不提高执行效率。它可能会改变维护和理解效率。
嵌套类成为父类的 另一个属性 。您必须引用A.B而不是B。就是这样,您将查找推迟到另一个名称空间。换句话说,您的__init__方法将失败,因为没有全局名称B,只有A.B并且self.B存在(都引用相同的类对象)。
A.B
B
__init__
self.B
否则,嵌套类与其父类之间就没有特殊的关系,就像Java中那样。
大多数Python开发人员不会嵌套类,因此这样做会违反约定并增加维护成本。