Python 我想创建一个时间类,它有不同的时间单位作为方法

Python 我想创建一个时间类,它有不同的时间单位作为方法,python,python-3.x,Python,Python 3.x,我想创建一个时间类,将“数量”和“单位”作为其输入 i、 e 我希望能够有不同的时间单位作为方法,以便任何时间都可以快速转换为任何其他时间单位 i、 e 我有一个时间单位及其对应的秒值(我使用的最小时间单位)的字典,因此输入的任何时间都可以转换为秒 time_dict = {'seconds': 1, 'minutes': 60, 'hours': 3600, 'days': 86400, 'weeks': 604800, 'years': 31556952, 'decades': 315569

我想创建一个时间类,将“数量”和“单位”作为其输入

i、 e

我希望能够有不同的时间单位作为方法,以便任何时间都可以快速转换为任何其他时间单位

i、 e

我有一个时间单位及其对应的秒值(我使用的最小时间单位)的字典,因此输入的任何时间都可以转换为秒

time_dict = {'seconds': 1, 'minutes': 60, 'hours': 3600, 'days': 86400, 'weeks': 604800, 'years': 31556952, 'decades': 315569520, 'centuries': 3155695200, 'millennia': 31556952000}
因此,从一个时间单位到另一个时间单位的转换只需要将数量乘以单位(以秒为单位)并除以所需单位(以秒为单位)。我的问题是:

  • 字典是存储这些值的合适工具吗
  • 为了这个目的,可以将字典构建到类中吗?这是一件理想的事情吗
  • 这个工具是否已经存在于某个地方
  • 可能不会。由于这是一个简单的数学运算,您可以将秒数存储为整数(以避免浮点精度问题),然后在每个函数中除以正确的因子 我误解了你原来的问题。是的,dict是存储这些数字的合适方法。也可以在类中定义单个常量。但是请注意,一年并不总是有365天

  • 我不太清楚你所说的词典内置到类中是什么意思。只需创建这样一个类是的,您可以在这样一个类中包含这样一个dict:

  • 对。中国也有类似的情况。您可以将持续时间转换为
    timedelta
    对象,然后
    timedelta.total_seconds()
    将给出秒数。在那之后,计算天数等只是数学
    timedelta
    甚至通过实施除法操作为您简化了它。例如,
    timedelta(天=1)/timedelta(小时=1)
    给出了
    24.0

  • 3.是的,存在着非常相似的情况。timedelta不是用来计算两个给定时间之间的持续时间吗?它可以任意地从一个单位的时间转换到另一个类似的庄园作为我试图完成?谢谢你的信息。关于您提到的关于一年中天数的问题,这个用例不需要担心,因为我没有使用像2020年这样的特定年份(可能涉及闰年等)。1年只是一个标准年,有一个标准秒数,因为我处理的是时间单位,而不是实际日期。那么,“乘数”前面的下划线的意义是什么?@StephenWilliams按照惯例,一个前导下划线表示“私有变量”,当然,因为Python并不真正支持私有变量,所以它本质上只是PEP所称的“弱内部使用指示器”。明白了!非常感谢。我很容易就能得到我想要的
    x.seconds()
    x.hours()
    
    time_dict = {'seconds': 1, 'minutes': 60, 'hours': 3600, 'days': 86400, 'weeks': 604800, 'years': 31556952, 'decades': 315569520, 'centuries': 3155695200, 'millennia': 31556952000}
    
    class timespan:
        _multiplier = {'seconds': 1, 'minutes': 60, 'hours': 3600, 'days': 3600*24, 'weeks': 3600*24*7}
        def __init__(self, number, unit):
            self.num_seconds = number * timespan._multiplier[unit]
        
        def days(self):
            return self.num_seconds / timespan._multiplier['days']
    
        def hours(self):
            return self.num_seconds / timespan._multiplier['hours']