【问题标题】:Is it a good practice to nest classes? [closed]嵌套类是一个好习惯吗? [关闭]
【发布时间】:2015-08-03 06:17:36
【问题描述】:

我设法定义了一个类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的效率?有更好的解决方案吗?

【问题讨论】:

  • 您可能想阅读the zen
  • Python 的嵌套类不像 Java 的嵌套类,内部类可以引用外部类的实例。它们实际上是两个独立的类。 A.a1 = pyfunc1() 将在 class 上分配 a1 字段。

标签: python class oop


【解决方案1】:

嵌套类不会降低或提高执行效率。它可能会改变维护和理解效率。

嵌套类变成父类的另一个属性。您必须将其引用为 A.B 而不是 B。就是这样,您将查找推迟到不同的命名空间。换句话说,你的__init__ 方法会失败,因为没有全局名称B,只有A.Bself.B 存在(都引用同一个类对象)。

嵌套类与其父类之间没有特殊关系,就像在 Java 中那样。

大多数 Python 开发人员不嵌套类,因此这样做会破坏约定并增加维护成本。

【讨论】:

  • 谢谢。我根据你的建议修改了我的脚本。所以我会放弃这种风格。
猜你喜欢
  • 2020-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-30
  • 2016-01-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多