Python: Почему вы не можете использовать self.variable в качестве необязательного аргумента в методе? - PullRequest
1 голос
/ 11 июня 2019

Я создал класс, в котором я хотел передать переменную self.variable в необязательный аргумент в методе. Причина в том, что я хочу сохранить информацию в Self.variable, сделанном другим методом, однако, если я использую метод, мне бы хотелось иметь опцию переопределения self.variable с моей собственной ручной информацией.

К сожалению, это запрещено, поэтому мне было интересно, почему нет !? Кроме того, мне было интересно, если кто-нибудь знает Pythonic способ достижения той же цели?

Это пример того, что я пробовал:

# example:

class Example(Object)

    def __init__(self):
        self.variable = []

    def fill_variable(self):
        self.variable = [random.randint(1,10)] * 10

    def use_variable(self, random_numbers = self.variable)
        print(random)

test.Example()
test.fill_variable()
test.use_variable()

# or
test.use_variable(random_numbers=[1,2,3,4,5,6,7,8,9,10])

Я ожидал, что test.use_variable() напечатает 10 случайных чисел И это test.use_variable(random_numbers=[1,2,3,4,5,6,7,8,9,10]) будет print(1,2,3,4,5,6,7,8,9,10)

Спасибо за любую помощь и объяснение!

Ответы [ 2 ]

1 голос
/ 11 июня 2019

Строки кода на уровне класса, которые включают в себя строки def методов, выполняются во время импорта один раз.В настоящее время не существует экземпляра класса, который мог бы быть self, и даже класс еще не завершен.

Другой момент заключается в том, что имя аргумента self существует внутри только метод.

1 голос
/ 11 июня 2019

К сожалению, это невозможно, вместо этого вы можете использовать оператор if, проверяя, что это то же самое значение (None), если так, присвойте его self.variable:

def use_variable(self, random_numbers = None):
    if random_numbers == None:
        random_numbers = self.variable
    print(random_numbers)
...