Классы Python: необязательный аргумент - PullRequest
0 голосов
/ 07 июня 2018

Я хочу, чтобы пользователь мог инициировать класс, передав ему аргумент, и если он не передает его, класс должен автоматически создавать его.Как это обычно делается в Python?Пример:

class MyClass(object):

    def __init__(self, argument):

        self.argm = argument
        # logic here: if user does not pass argument
        # run some function or do something


    def create_argm(self):

        self.argm = 'some_value'



object_example = MyClass()
print(object_example.argm) # will print 'some_value'

object_example = MyClass('some_other_value')
print(object_example) # will print 'some_other_value'

Редактировать: self.argm будет python-docx Object, поэтому я не могу сделать def __init__(self, argument = Document() или я?

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

Если вы не можете создать значение в определении функции, вы можете использовать значение, которое ничего не указывает, к счастью, Python имеет None, поэтому вы можете сделать что-то вроде:

class MyClass(object):
    def __init__(self, argument=None):
        if argument is None:
            self.argm = self.create_argm()
        else:
            self.argm = argument

    def create_argm(self):
        return 'some_value'

, если None делитне подходит, потому что вы хотите, чтобы это было действительное значение для argument, не предполагая, что оно было опущено, вы всегда можете создать фиктивное значение:

class MyNone:
    pass

class MyClass(object):
    def __init__(self, argument=MyNone):
        if argument is MyNone:
            self.argm = self.create_argm()
        else:
            self.argm = argument

    def create_argm(self):
        return 'some_value'
0 голосов
/ 07 июня 2018

Обычно это делается с помощью значения по умолчанию, назначенного аргументу ключевого слова:

class MyClass(object):

    def __init__(self, argument='default value'):
        self.argm = argument

Вам следует обратить особое внимание, если вы хотите, чтобы это значение по умолчанию было изменяемым объектом;это может привести к нежелательному поведению, поскольку объект будет создан только один раз, а затем мутирован.

...