如何在Python中正确实现方法级联-链接?

时间:2018-08-08 13:29:55

标签: python chaining

我有一个大致像这样的python代码:

class SomeClass():

    def get_date(self):
        date = # read the data from the database in YYYY-MM-DD HH:MM:SS format
        return date

现在,我将在API查询中使用返回的值,该查询将输入作为unix时间戳接受。实际上,我可以将返回的日期赋予另一个函数,以将其转换为时间戳,但是我认为这是学习函数级联/链接的好机会,而我一直在Python中对此感到疑惑。

现在,我基本上想要实现的是这样的:

  • 如果我仅执行SomeClass.get_date(),我希望日期具有从数据库返回的格式,即YYYY-MM-DD HH:MM:SS
  • 如果执行SomeClass.get_date().as_timestamp(),则应将其作为时间戳记。
  • 如果不可能的话,我会选择像SomeClass.get_date().as_datetime()SomeClass.get_date().as_timestamp()
  • 我可能将第二个函数(.as_timestamp())用于一个以上的主要函数(可能需要将多个datetime列转换为时间戳)。

我研究了一些函数级联的例子。他们大多说,这样做的关键是返回self,但是我找不到有关如何以所需方式实现的信息。

我基本上需要将返回值输入到第二个函数中(我想),但是不确定是否可行,也不知道该怎么做。有任何想法吗?

1 个答案:

答案 0 :(得分:1)

您要寻找的内容看起来像这样:

import time
import calendar

class DateClass():

  def get_date(self):
    self = # read the data from the database in YYYY-MM-DD HH:MM:SS format
    return self

  def as_timestamp(self):
    mysql_time = time.strptime(self, '%Y-%m-%d %H:%M:%S')
    self = calendar.timegm(mysql_time)
    return self

d = DateClass()
print(d.get_date())
print(d.get_date().as_timestamp())
print(d)
d.get_date()
print(d)

第一个输出将是MySQL日期时间,第二个将是Unix时间戳,第三个也将是unix时间戳,第四个将是datetime。 get_date()as_timestamp()在实例d上被调用时对其进行突变。

在此配置中,as_timestamp()要求get_date(),这似乎与您的问题相符,但是您可以通过从self的数据库中分配as_timestamp()来更改它像这样:

def as_timestamp(self):
  self = # read the data from the database in YYYY-MM-DD HH:MM:SS format
  mysql_time = time.strptime(self, '%Y-%m-%d %H:%M:%S')
  self = calendar.timegm(mysql_time)
  return self

这将使得可以独立于as_timestamp()来调用get_date()。然后,您还可以添加d.as_timestamp()来突变d的任何迭代,以使d是一个时间戳。