【问题标题】:Proper way to Implement a Birthday Class in Object Oriented Python在面向对象的 Python 中实现生日类的正确方法
【发布时间】:2021-06-16 20:44:11
【问题描述】:

我有以下课程

class Dob:
    def __init__(self):
        self.welcome_text = ""
    
    #Computes DOB
    def calc_dob(self):
        pass

    #Get User Input
    def get_input(self, msg):
        pass

    def __repr__(self):
        print(self.welcome_text)
        total_days = self.calc_dob()
        return str(total_days)

然后这样称呼它:

if __name__ == "__main__":
    print(Dob())

最初我认为这没问题,但将其导入 PyCharm IDE,它显示警告方法 calc_dobget_input 可能是静态的。

按照 IDE 的建议,它将方法移到类之外。

剩下的就是 __repr__ 方法。这让我觉得上面的类有问题。

代码是否正常,我应该只是用 @staticmethod 注释标记方法?或者我的想法不是面向对象的,我怎样才能使它面向对象。

任何帮助将不胜感激。

编辑: 为了简单起见,我删除了代码(方法的实现)。警告的原因是我没有使用类的实例。我要问的是这是否是一个正确的实现

【问题讨论】:

  • 我认为 PyCharm 告诉 calc_dobget_input 需要是静态的。因为这些方法中没有代码。一旦这些方法实现了,也许它会很好用
  • @tvgriek 的 cmets 在这里很好。 “生日”对象应该包含一个日期。它不应该打印欢迎信息。它不应该要求输入。 I/O 是调用者的责任。你不知道这个对象是否总是与控制台一起使用。
  • 非常感谢@TimRoberts。我想我明白了

标签: python oop object-oriented-analysis


【解决方案1】:

我认为 DoB 对象应该有一项工作:保存出生日期。问题是这是否需要。我们已经有日期对象了。 DoB 上的计算宁愿放在 DOBHelper 对象或函数中。 pycharm 移动方法的原因是您没有在其中使用任何类变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多