gpt4 book ai didi

python - 我应该以及如何在 python 中向 int 添加方法吗?

转载 作者:太空狗 更新时间:2023-10-30 01:59:08 25 4
gpt4 key购买 nike

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

我正在尝试学习 python 中的 OOP,并完成了一个简单的“时间”类,如下所示:

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”实例中获取一个 int,表示我执行 时的时间(但以秒为单位)整数(时间(3、4、5))。顺便说一下,我觉得这有点棒。但是,为了使用它,最好知道如何让“int”有一个返回“Time”对象的新方法,所以像 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)

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

最佳答案

不,你真的不能给 int 添加方法。您可以将 int 子类化,并从您的 __int__ 方法返回它,但这对您没有太大帮助,因为在该方法上调用了 int()仍然会返回一个常规的 int。

您使用常规函数转换回 Time() 的想法是正确的,但将其设为类方法可能会更好,因此它的关系更加明显:

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

关于python - 我应该以及如何在 python 中向 int 添加方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18831083/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com