【问题标题】:Have each subclass contain a list of its own?每个子类都包含自己的列表吗?
【发布时间】:2015-03-06 23:23:04
【问题描述】:

我希望有一个基类,这将使每个子类都包含一个列表,而无需为每个子类手动完成? 例如,当我从我的BaseClass 创建一个Subclass 时,我希望我的Subclass 自动拥有element_list 列表。 目前我是这样做的:

class BaseClass:
    element_list = ['Base Element', 'More Element\'s']
    def do_stuff(): pass

class Subclass(BaseClass):
    # Replaces BaseClass' element_list
    element_list = ['Sub Element', 'More Sub Element\'s']
    def do_sub_stuff(): pass

就目前而言,这似乎很容易手动完成,但我希望这个类系统对于不太了解它的人来说尽可能地友好(基本上只阅读热门教程做这些子类),大多数类都会有一个空的element_list,或者在定义类之后在代码中添加元素。

我希望它默认有一个空列表,即使没有在子类中手动定义,并且每个子类都会自动拥有自己的唯一列表。

这可能吗?

【问题讨论】:

  • 如何从方法中返回列表,然后在覆盖类中合并两个列表,以便拥有所有元素?
  • 如果你希望默认有一个空列表,你不能把element_list设置为BaseClass中的空列表吗?
  • 这个列表的目的是什么?如果我们对问题有更多了解,可能有比列表更好的解决方案。
  • @sweeneyrod 那么它不会是唯一的,更改其中一个子类中的列表之一将更改其他子类中的每一个列表。他们都会共享同一个列表。
  • @Daniel 我希望有一个类列表,当初始化子类的实例时,我会做self.elements = [element_cls() for element_cls in self.element_list]。唯一的要求是我的基类的子类需要看起来尽可能简单。

标签: python class python-3.x subclass class-variables


【解决方案1】:

将可变对象作为类属性几乎不是一个好主意。只需使用元组,如果您需要修改列表,您可以随时覆盖属性。

【讨论】:

  • 会做,没想到这种可能性,尽管它很明显。非常感谢:)
猜你喜欢
  • 2011-05-21
  • 1970-01-01
  • 2012-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多