![](/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.