当我尝试使用我的默认构造函数实例化一个对象时,为什么我会收到基于调用我的参数化构造函数的错误?
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 的一小部分,以便您可以看到可用的构造函数和一些数据成员:
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
因此,在同一文件中,我尝试使用默认构造函数实例化 class 的实例:
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()
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
我之前使用的提供多个构造函数的模式是使用 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)
关于为什么我无法调用默认构造函数有什么想法吗?
这里是 class 的一小部分,以便您可以看到可用的构造函数和一些数据成员:
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
因此,在同一文件中,我尝试使用默认构造函数实例化 class 的实例:
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()
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
我之前使用的提供多个构造函数的模式是使用 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)