![](/img/trans.png)
[英]Why am i getting this error when i try to answer my own dns request?
[英]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.