繁体   English   中英

当我尝试使用默认构造函数实例化对象时,为什么会根据调用的参数化构造函数收到错误消息?

[英]Why am I getting an error based on my parameterized constructor being called when I try to instantiate an object using my default constructor?

关于为什么我无法调用默认构造函数的任何想法?

这是该类的一小部分,以便您可以看到可用的构造函数和一些数据成员:

class TweetExplorer:

    CLEAN_OUTPUT_PATH = constants.CLEAN_OUTPUT_PATH

    # Authorization keys
    API_KEY = ''
    API_SECRET_KEY = ''
    ACCESS_TOKEN = ''
    ACCESS_TOKEN_SECRET = ''

    OUTPUT_PATH = '' 

    API_ACCESS = 0

    def __init__(self):

        self.OUTPUT_PATH = constants.OUTPUT_PATH 
        self.CLEAN_OUTPUT_PATH = constants.OUTPUT_PATH


def __init__(self, api_key, api_secret_key, access_token, access_token_secret):

    self.API_KEY = api_key
    self.API_SECRET_KEY = api_secret_key
    self.ACCESS_TOKEN = access_token
    self.ACCESS_TOKEN_SECRET = access_token_secret

    try: 
        self.check_access()
    except Exception as ex:
        print(ex)

    self.OUTPUT_PATH = constants.OUTPUT_PATH 

因此,在同一个文件中,我尝试使用默认构造函数实例化类的实例:

if __name__ == '__main__':

    explorer = TweetExplorer()

我没有调用默认构造函数,而是收到以下错误:

Message= init () 缺少 4 个必需的位置参数:'api_key'、'api_secret_key'、'access_token' 和 'access_token_secret' Source=C:\\source\\repos\\TweetExplorer\\TweetExplorer.py StackTrace: File "C:\\source\\ repos\\TweetExplorer\\TweetExplorer.py",第 499 行,在资源管理器中 = TweetExplorer()

我之前用于提供多个构造函数的一种模式是使用classmethod

class TweetExplorer:

    CLEAN_OUTPUT_PATH = constants.CLEAN_OUTPUT_PATH
    API_ACCESS = 0

    def __init__(self):
        self.OUTPUT_PATH = constants.OUTPUT_PATH
        self.CLEAN_OUTPUT_PATH = constants.OUTPUT_PATH
        self.API_KEY = ''
        self.API_SECRET_KEY = ''
        self.ACCESS_TOKEN = ''
        self.ACCESS_TOKEN_SECRET = ''

    @classmethod
    def with_credentials(cls, api_key, api_secret_key, access_token, access_token_secret):
        obj = cls()

        obj.API_KEY = api_key
        obj.API_SECRET_KEY = api_secret_key
        obj.ACCESS_TOKEN = access_token
        obj.ACCESS_TOKEN_SECRET = access_token_secret

        try:
            obj.check_access()
        except Exception as ex:
            print(ex)

        return obj

现在您可以TweetExplorer没有任何参数的情况下初始化TweetExplorer

TweetExplorer()

或与信用

TweetExplorer.with_credentials(api_key, api_secret_key, access_token, access_token_secret)

Python 将覆盖init的第一个声明。 要使用默认值实现可选参数,您可以执行以下操作

def __init__(self, api_key='', api_secret_key='', access_token='', access_token_secret=''):
    self.API_KEY = api_key
    self.API_SECRET_KEY = api_secret_key
    self.ACCESS_TOKEN = access_token
    self.ACCESS_TOKEN_SECRET = access_token_secret

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM