关于为什么我无法调用默认构造函数的任何想法?
这里是类的一小部分,因此您可以看到可用的构造函数和一些数据成员:
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'源= C:\ source \ repos \ TweetExplorer \ TweetExplorer.py堆栈跟踪:在第499行的文件“ C:\ source \ repos \ TweetExplorer \ TweetExplorer.py”资源管理器= TweetExplorer()
我之前用于提供多个构造函数的模式是使用classmethod
s:
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