#python #python-3.x #python-2.7
#python #python-3.x #python-2.7
Вопрос:
Я искал stackoverflow и не смог найти хорошего ответа на этот вопрос.
Если я создам класс:
class Test():
def foo(self):
pass
def bar(self):
if bar() is called before foo(), then throw exception
есть ли способ, чтобы, когда кто-то создает экземпляр class и случайно вызывает bar()
before foo()
подобным образом:
a = Test()
a.bar()
Python выдаст исключение, сообщающее пользователю foo()
о первом вызове.
Комментарии:
1. Что вы пробовали до сих пор? В чем именно заключалась проблема?
2. вы можете использовать флаг, чтобы проверить, был ли вызван foo … вы также можете поместить код
foo
in__init__
, чтобы он вызывался при создании объекта.3. Или вы можете сделать так, чтобы вызов
bar
beforefoo
не был ошибкой.4. Или вы можете
bar
потребовать «ключ», который можно получить изfoo
(как это делают видеоигры, чтобы вы посещали места в правильном порядке).
Ответ №1:
Вам нужен какой-то способ указать, что foo()
произошло при вызове bar()
, может сработать что-то вроде следующего:
class Test:
def __init__(self):
self.foo_called = False
def foo(self):
self.foo_called = True
def bar(self):
assert self.foo_called,"Error: foo() needs to be called first" # Or another error message
В идеале, ваш код будет обрабатывать это за вас. Если вам нужно вызвать только foo()
один раз, тогда он может быть включен, в __init__
противном случае вы сможете вызвать его bar()
Ответ №2:
Просто вызывайте foo
, когда вы создаете экземпляр объекта класса Test
class Test():
def __init__(self):
self.foo()
def foo(self):
print('foo called')
def bar(self):
print('bar called')
t = Test()
t.bar()
foo called
bar called
Комментарии:
1. Я вижу, что вы сделали, и это имеет смысл, но что, если пользователь явно вызывает
foo()
снова, не осознавая, что он уже создан в__init__
методе? Я считаю, что должен быть какой-то код, который должен обрабатывать этот крайний случай2. Код внутри foo может быть изменен для обработки случая, когда при повторном вызове он не делает ничего плохого