如何在python的__init__方法中覆盖默认值?

时间:2019-03-15 06:05:01

标签: python

class GoogleAuth(ApiAttributeMixin, object):
    def __init__(self, settings_file='settings.yaml',http_timeout=None):

在这里我想将settings_file的默认值更改为我自己的路径

2 个答案:

答案 0 :(得分:2)

您可以在定义中分配新路径。

class GoogleAuth(ApiAttributeMixin, object):
    def __init__(self, settings_file='settings.yaml',http_timeout=None):
       settings_file = '/var/myfile.yaml'

答案 1 :(得分:1)

因此,您的一个类是从另一个类继承的。而且,当我们谈论__init__中的默认值时-表示该值,将在未提供特定值时使用。例如:

google_auth = GoogleAuth()  # default value for `settings_file` will be used
google_auth = GoogleAuth(http_timeout=23)  # default value for `settings_file` will be used
google_auth = GoogleAuth(settings_file='specific_one.yaml')  # specified one will be used instead of default
...

很可能您的基类ApiAttributeMixin具有自己的settings_file参数默认值。因此,您想用子类GoogleAuth的另一个默认值覆盖该默认值。

假设您要在google_settings.yaml类中将settings_file作为GoogleAuth参数的默认值。该代码将如下所示:

class ApiAttributeMixin(object):

    def __init__(self, settings_file='settings.yaml', http_timeout=None):
        pass


class GoogleAuth(ApiAttributeMixin, object):

    def __init__(self, settings_file='google_settings.yaml', http_timeout=None):
        super(GoogleAuth, self).__init__(settings_file, http_timeout)