Python: почему нельзя использовать переменную self.variable в качестве необязательного аргумента в методе?

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

К сожалению, это не разрешено, поэтому мне было интересно, почему бы и нет!? Кроме того, мне было интересно, знает ли кто-нибудь способ 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)

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

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
3
0
1 022
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

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

или вы можете просто сделать: self.use_variable = lambda x=self.variable:print(x) внутри вашего __init__, таким образом, вы можете использовать его как необязательный аргумент

Ashish Ranjan 11.06.2019 05:31

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

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

Другие вопросы по теме