【问题标题】:Python - call a method from a class just as you are instantiating it?Python - 从一个类中调用一个方法,就像你实例化它一样?
【发布时间】:2013-11-18 06:08:35
【问题描述】:

是否可以在实例化时从类中调用方法?

我尝试了以下但不断得到

Base Class:
    class A(object):
    """ Parent class """
    def __init__(self, **kwargs):     

        # query parameters
        self.start_time     = kwargs.get('start_time', None)


    def set_query_starttime(self, str_time):
        """ sets query start time """
        if self.verbosity:
            print("I: Set query start time parameter")

        if not str_time:
            return

        utc_start_time = self._format_time(str_time)

        try:
            self.query.SetStartTime(utc_start_time.tm_year,
                                    utc_start_time.tm_mon,
                                    utc_start_time.tm_mday,
                                    utc_start_time.tm_hour,
                                    utc_start_time.tm_min,
                                    utc_start_time.tm_sec)

        except pythoncom.com_error as error:
            e = format_com_message("Failed to format date")
            raise Error(e)

我想实例化基类并在实例化类时调用 set_query_starttime 方法:

myStartTime = "Sun Nov 03 20:00:00 2013"
myEndTime = "Sun Nov 03 21:00:00 2013"

test = A(start_time = A.set_query_starttime(myStartTime))

但不断得到: TypeError:未绑定的方法 set_query_starttime() 必须以 A 实例作为第一个参数调用(改为获取 str)

我什至尝试将@staticmethod 添加到基类的 set_query_starttime 函数中,但仍然出现同样的错误。

【问题讨论】:

  • 只需在__init__ 中调用self.set_query_starttime。请记住,默认参数不会在运行时进行评估。

标签: python


【解决方案1】:

只需传入类实例化的字符串并调用__init__中的方法。

class A(object):
""" Parent class """
def __init__(self, start_time=None):     
    if start_time:
        self.set_query_starttime(start_time)

...etc...

然后将其用作:

myStartTime = "Sun Nov 03 20:00:00 2013"
myEndTime = "Sun Nov 03 21:00:00 2013"

test = A(start_time=myStartTime)

【讨论】:

    【解决方案2】:

    这是因为您试图在没有先创建实例的情况下调用类中的函数。然后这个方法是未绑定的。

    要解决此问题,您可以执行A().set_query_starttime,它将使用实例调用该函数。

    temp = A().set_query_starttime(myStartTime)
    test = A(start_time=temp)
    

    【讨论】:

    • 行不通,因为您会将start_time 设置为set_query_starttime 的返回值None
    猜你喜欢
    • 2015-06-10
    • 1970-01-01
    • 1970-01-01
    • 2011-12-30
    • 1970-01-01
    • 2022-07-08
    • 1970-01-01
    • 2019-03-12
    • 1970-01-01
    相关资源
    最近更新 更多