Очень простой вопрос, но я новичок в python как объектно-ориентированный язык программирования. Я пытаюсь написать класс. Представьте, что он организован следующим образом:
class myClass:
def __init__(self,a,b,runit=True):
self.a = a
self.b = b
if runit:
self.run_func()
def run_func(self):
self.c = self.a*self.b
return
Итак, как вы видите, класс инициализируется только с a
и b
. По умолчанию он инициализирует c
из этих аргументов, но это не обязательно. Теперь позвольте мне проиллюстрировать три варианта использования, которые, по моему мнению, должны вести себя одинаково, но не являются такими:
# Use 1
test = myClass(5,2)
print(test.c)
# Use 2
test = myClass(5,2,runit=False)
test.run_func()
print(test.c)
# Use 3
test = myClass(5,2,runit=False).run_func()
print(test.c)
Это возвращает следующее:
10
10
Traceback (most recent call last):
File "<ipython-input-37-cb854baa3a0c>", line 23, in <module>
print(test.c)
AttributeError: 'NoneType' object has no attribute 'c'
Почему экземпляр класса не может работать немедленно и передать этот результат в test
за один шаг? В моей голове (1) и (2) - это один и тот же набор операций, за исключением того, что одна разбита на два шага, а другая выполняется в одной строке.
И, что более важно, как я могу это исправить с помощью редактировать мой класс, чтобы вести себя ожидаемым образом?