【问题标题】:How to avoid repeating self when defining subclasses in python?在python中定义子类时如何避免重复self?
【发布时间】:2019-08-25 06:40:01
【问题描述】:

我正在尝试构建一种算法来构建有趣但符合语法的句子。作为其中的一部分,我需要将单词分类为不同的类别,并想探索使用 OOP 来实现这一点,但我正在努力避免违反 DRY。下面是一个简化的例子。

class word:
    def __init__(self,name):
        self.name = name
        self.firstLetter = self.name[0]
        self.length = len(name)



class noun(word):
    def __init__(self, name):
        self.name=name
        super().__init__(name)




class agent(noun):
  def __init__(self, name):
        self.name=name
        super().__init__(name)

我希望所有单词都共享某些方法和属性,例如“长度”等于他们名字的长度。但是,我只需要在最低级别(在本例中为代理)命名一个对象,因此在每个子类的 init 中指定一个名称似乎是多余的。

总之,有没有什么方法可以实现与上述代码相同的最终结果,而无需编写以下令人作呕的广告?

def __init__(self, name):
    self.name=name
    super().__init__(name) 

【问题讨论】:

  • 不要覆盖子类的构造函数?
  • 你能告诉我如何在不这样做的情况下编写“名词”的类定义吗?
  • class noun(word): pass

标签: python string class oop


【解决方案1】:

以下内容会使您的代码枯竭:

class word:

    firstLetter: str = ''

    def __init__(self, name: str) -> None:
        self.name = name
        self.length: int = len(name)
        if self.length:
            self.firstLetter = self.name[0]        


class noun(word):
    pass


class agent(noun):
    pass

【讨论】:

  • 你应该添加else: self.firstLetter=None(或类似的东西)
  • firstLetter 已定义为类变量:firstLetter = '' @barny
猜你喜欢
  • 1970-01-01
  • 2021-09-02
  • 2019-04-07
  • 2016-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-04
  • 1970-01-01
相关资源
最近更新 更多