【问题标题】:What is the best way to overwrite a Python Class __str__ method?覆盖 Python 类 __str__ 方法的最佳方法是什么?
【发布时间】:2012-08-16 03:18:21
【问题描述】:

在我的应用程序中,我希望我的所有 datetime.__str__() 以不同方式返回到默认值。简单地继承和覆盖方法可以吗?

class datetime(datetime):
    def __str__(self):
        return self.strftime('%d-%m-%y %H:%M:%S')

任何建议都会很棒。

【问题讨论】:

  • 只用小写字母命名类不是一个好习惯。查看 Python 风格指南:python.org/dev/peps/pep-0008/#class-names
  • 是的,这基本上就是 OOP 中的工作方式。但是请注意,您的类将不再返回 ISO 8601 格式的字符串,这至少在理论上可能会导致其他地方出现问题——例如,如果您将类的实例传递给期望常规 @ 的例程987654323@ 对象。直接使用现有的strftime(format) 方法可能会更好。
  • @Eric 那是我做的第一件事。我的问题是它是否“好”,而不是“这不起作用”。谢谢。

标签: python class datetime inheritance


【解决方案1】:

通常,您会希望将新类命名为不同于内置模块中定义的名称,但是是的,您就是这样做的。为了您的理智,请不要使用与预定义类相同的名称来创建类定义。

我只是尝试执行class datetime(datetime) 位,它确实有效,至少在解释器中,但任何 python 专家都可能会笑或不寒而栗。

【讨论】:

  • 哈哈,是的,我认为你是对的。它可能会在某个时候咬我。我会去取一个不同的名字。谢谢!
【解决方案2】:

这是一个相当哲学的问题 :) 通常在 Python 中我们不喜欢这样的事情。 您现在必须使用您自己的类,并始终记住使用它而不是默认日期时间(如果它们具有相同的名称,则很难维护)。 Ruby 家伙只会使用 monekypatch 日期时间,我认为这更糟糕。

我个人什至不会用不同的名字继承它(这也会让我感到困惑),而是在任何类之外创建一些快捷功能并直接使用它。

【讨论】:

    猜你喜欢
    • 2011-06-09
    • 2015-08-08
    • 1970-01-01
    • 1970-01-01
    • 2011-06-25
    • 1970-01-01
    • 2010-12-03
    • 1970-01-01
    • 2010-09-20
    相关资源
    最近更新 更多