python - python中定义子类时如何避免重复self?

标签 python string class oop

我正在尝试构建一种算法来构造有趣但合乎语法的句子。作为其中的一部分,我需要将单词分为不同的类别,并想探索使用 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 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

关于python - python中定义子类时如何避免重复self?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57643809/

相关文章:

python - 在动画中使用 Matplotlib-Patch

python - 多对多关系的 Django 方向

Python——搜索子串全词)

c# - 将空的 Textbox.Text 读取为 ""、null 或 String.Empty?

perl - 你能有一个没有 .pm 标签的 Perl 类吗?

c# - 如何创建具有未在类中指定的成员的对象?

python - 深度优先树搜索

python - 在 python 中实例化一个元类

python - 如何获取关键字后的字符串

c++ - 我无法使用 C++ 访问类的属性