当前位置: 首页 > 知识库问答 >
问题:

蟒蛇日期类方法

南宫书
2023-03-14

全新的这里!

这是我第一次使用Python类,我有点困惑。我想尝试用三个属性存储日期——年、月和日(作为整数)。

我想做的是:

对于____init____()函数,取一年、月和一个日期(默认值为 1900、1 和 1),并在写出月份的情况下返回

>>date_one = Date( 1973, 5, 2)
May 2, 1973
>>date_two = Date( 1984)
January 1, 1984

对于____str____() 函数,将数据格式化为包含年、月和日的字符串:

>>date_one = Date( 1973, 5, 2)
>>string = str(date_one)
>>string
'1973-05-02'
>>date_two = Date( 1984)
>>print date_two
1984-01-01

same_date_in_year()确定两个日期是否在同一日期,即使它们不在同一年

>>date_one = Date( 1972, 3, 27)
>>date_two = Date( 1998, 4, 17)
>>date_three = Date(1957, 4, 17)
>>date_one.same_date_in_year(date_two)
False
>>date_two.same_date_in_year(date_three)
True

我目前掌握的情况是:

days_in_month = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]

month_names = ['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']

class Date(object):
    year = 1900
    month = 1
    day = 1

    def __init__(self, year=1900, month=1, day=1):
        self.year, self.month, self.day = year, month, day
        print month_names[month], str(day)+', '+str(year)

    def __str__(self, year=1900, month=1, day=1):
        self.year, self.month, self.day = year, month, day
        print str(year)+'-'+str(month).rjust(2,'0')+'-'+str(day).rjust(2,'0')


    def same_date_in_year(year, month, day):

    pass


if __name__ == "__main__":
    date_one = Date( 1972, 3, 27 )
    date_two = Date( 1998, 4, 13 )
    date_three = Date( 1996, 4, 13 )
    print "date_one is " + str(date_one)
    print "date_two is " + str(date_two)
    print "date_three is " + str(date_three)
    print "date_one.same_day_in_year(date_two)", date_one.same_day_in_year(date_two)
    print "date_two.same_day_in_year(date_three)", date_two.same_day_in_year(date_three)
    print  

在通过之前,我不知道类将如何工作以及其中的功能。如果有人能帮助我,将不胜感激!

共有2个答案

晏和风
2023-03-14

我对Python也有点陌生。我可以推荐以下解决方案吗?您可以简单地扩展Python中已经可用的日期类吗?Python包含“电池”,这意味着您不必利用标准库来重复自己。

当第一次学习Python时,我发现自己不断地重新发明轮子,或者在这种情况下的日期对象,直到我理解了扩展Python类的概念。

# import date type from modules included with Python install
from datetime import date


class Date(date):  # extend the date type imported above
    # some date formats, see http://strftime.org/ for values
    year_month_day = "%Y %m %d"
    month_day_year = "%m %d %Y"

    # *args and **kwargs are the arguments and key word arguments
    # passed when date object is created
    def __init__(self, *args, **kwargs):
        # set a default string_format from choices defined above
        # that is used in the __str__ and __repr__ functions
        self.string_format = self.year_month_day
        # call the __init__ on parent `date` object
        # passing all args and kwargs passed on object creation
        # at date = Date(1970, 1, 1)
        super(Date, self).__init__(*args, **kwargs)

    def __repr__(self):
        # date has a function called `strftime` that takes
        # a string format and returns the formatted date
        return self.strftime(self.string_format)

    def __str__(self):
        return self.strftime(self.string_format)

扩展类的用法示例:

In:date_one=日期(1970,1,1)

在:打印日期_一

# 由date.string_format值“%Y %m %d”定义

出局:1970年1月1日

# 将string_format值更改为“%m %d %Y”

在:date_one.string_format=date_one.month_day_year

在:打印日期_一

1970年1月1日

您还可以设置字符串格式,如下所示:

在:date_one中。string_format=“%c”

在:打印日期_一

外出时间:1970年1月1日星期四00:00:00

这个关于Python中重写的特殊方法的链接可能会有所帮助。

乐健
2023-03-14

正如您在评论中所说,您正在寻找有关 init 方法的一些帮助,并且可能能够自己完成其余部分。

class MDate(Object):
  """Example Date class for learning purposes. Note the prefix 'M' in the
     class name to avoid conflicts with built-in classes."""
  def __init__(self, year=1900, month=1, day=1):
    for arg in [year, month, day]:
      if type(arg) != int:
        raise TypeException('Year, month, and day must be `int`')

    self.year = year
    self.month = month
    self.day = day
 类似资料:
  • 我正在运行Ubuntu 18.04。 我使用mysql连接器-python连接Python到MySQL。 我使用的是Python 3.6.7,并且已经安装了mysql连接器-python。 我已经安装了mysql连接器-python-py3_8.0.13-1ubuntu18.10_all.deb. 在运行Python脚本时,mysql。连接器模块似乎加载正确,但脚本在碰到光标时失败。next()具

  • 假设我有一些资源,我想在用python编写的aws lambda中的不同请求之间共享。我应该如何实现这一点? 是否有“启动后”挂钩,或者我应该在第一次调用时惰性地创建资源?“延迟初始化”的缺点是,它意味着一些请求会随机变慢,因为您选择了一个消费者来承担启动成本。 此外…这些资源会在lambda可执行文件被“冻结”后幸存下来吗? 本页https://docs.aws.amazon.com/lambd

  • 我需要在我的中添加一个新的目录位置,但问题是我使用的是一个全新安装的系统(Linux),其中尚未定义任何。我读过并使用过,我认为我很了解它,但我不知道当没有存在时会发生什么。 我不能附加到不存在的东西上,但我希望当前发现的所有重要库都能正常工作,因此要小心,我在Python中使用了来获取所有标准值。然后我为定义了一个-变量,包括我刚刚找到的所有节点,以及我的新目录。但是哇,很多东西都停止工作了!P

  • 我想定义一个返回树节点值列表的函数。列表按级别顺序排列(从上到下,从左到右),如果缺少孩子,则在其位置插入“无”。 这是二叉树实现

  • 我想把两次加在一起。国际标准化组织 有什么建议吗?

  • 我有一个UTC时间,我想知道从epoch开始的秒数。 我正在使用strftime将其转换为秒数。以2012年4月1日为例。 2012年4月1日,来自epoch的UTC为1333238400,但上面返回的是1333234800,相差1小时。 因此,看起来strftime正在考虑我的系统时间,并在某个地方应用时区偏移。我以为约会时间纯粹是天真的? 我该如何解决这个问题?如果可能,除非是标准的,否则避免