簡體   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