当我尝试使用默认构造函数实例化对象时,为什么会因为调用参数化构造函数而出现错误?

2024-09-30 00:25:13 发布

您现在位置:Python中文网/ 问答频道 /正文

关于我为什么不能调用默认构造函数,有什么想法吗?

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

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() missing 4 required positional arguments: 'api_key', 'api_secret_key', 'access_token', and 'access_token_secret' Source=C:\source\repos\TweetExplorer\TweetExplorer.py StackTrace: File "C:\source\repos\TweetExplorer\TweetExplorer.py", line 499, in explorer = TweetExplorer()


Tags: pathkeyselftokenapioutputsecretaccess
2条回答

我以前用于提供多个构造函数的模式是使用classmethods:

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.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

相关问题 更多 >

    热门问题