繁体   English   中英

我是否应该以及如何向 python 中的 int 添加方法?

[英]Should I, and how to, add methods to int in python?

(这是一个与学习相关的问题,所以关于我为什么应该做或不做任何事情的任何建议,以及让这些事情变得更好的推荐资源,都不仅仅是惠康。)

我正在尝试了解 python 中的 OOP,并像这样做了一个简单的“时间”class:

class Time(object):

    """A time representation."""

    def __init__(self, hours=0, minutes=0, seconds=0):
        self.hours = hours
        self.minutes = minutes
        self.seconds = seconds

    def __int__(self):
        return self.hours * 3600 + self.minutes * 60 + self.seconds

现在,当我执行int(Time(3, 4, 5))时,那个__ int __方法让我从代表时间(但以秒为单位)的“时间”实例中获取一个 int。 顺便说一下,我觉得这有点棒。 但是,为了使用它,最好知道如何使“int”有一个返回“Time”object 的新方法,这样就可以完成类似3643.time()的操作。

为什么? 由于各种原因:

  1. 因为通过这种方式,我现在了解了对我来说就像黑魔法一样的东西。 (这些强调的事情让事情发生......和相关的东西)

  2. 因为我不知道为什么我不应该。 (所以请告诉我)

我想我可以在任何 class 之外做类似以下的事情:

def time(seconds):
    """Return an HH:MM:SS stamp of "seconds", where "seconds" should be an int."""
    hours, minutes = 0, 0
    if seconds >= 3600:
        hours, seconds = divmod(int, 3600)
    if seconds >= 60:
        minutes, seconds = divmod(int, 60)
    return "{:02d}:{:02d}:{:02d}".format(hours, minutes, seconds)

但这似乎与这些对象的关系不够,似乎没有太多 object 导向......所以,我认为也许有更好的方法来处理这种事情。

不,你无法真正为int添加方法。 可以 __int__ int,并从你的__int__方法返回它,但这对你没什么帮助,因为在那上调用int()仍然会返回一个常规的int。

你使用常规函数转换回Time()想法是正确的,但是将它作为一个类方法可能会很好,所以它更明显地与它有关:

class Time(object):
    @classmethod
    def from_seconds(cls, seconds):
         _hours, _minutes, _seconds = ...
         return cls(_hours, _minutes, _seconds)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM