В классе Wizard
, я хотел бы установить атрибут wand
на значение, возвращаемое coroutine magic
.Как определить переменную, которая зависит от сопрограммы в __init__?
class Wizard:
async def acquire_wand(self):
self.wand = await magic()
Этот код считается "плохим Python", однако, поскольку wand
не определен в __init__
. Я не могу определить его в __init__
, хотя, поскольку await
может использоваться только в async
.
class Wizard:
def __init__(self):
self.wand = None
async def acquire_wand(self):
self.wand = await magic()
async def perform_spell(self):
if self.wand is None:
await self.acquire_wand()
self.wand.wave()
я мог установить wand
в None
в __init__
и использовать if self.wand is None:
там, где она доступна, но это кажется грязным и громоздким.
Как я могу гарантировать, что wand
определен во всем классе?
Это работает, но может быть довольно беспорядочным, если у меня есть несколько атрибутов ('wand',' cloak', 'hat' и' rabbit'). Это также может означать, что для каждого атрибута, который я использую в функции, мне понадобится '@ decorator', который кажется неудобным. – 2Cubed
@ 2Cubed У вас может быть декоратор, который принимает ** необязательные ** аргументы и проверяет, существуют ли все эти 'свойства'! – j4hangir
Jahangir: Верно. Но это по-прежнему кажется беспорядочным способом - я бы предпочел не использовать один и тот же декоратор для каждой функции в классе. – 2Cubed