Python 在同一个 class 的 __init__ 中键入允许某个 class 的对象
Python typing allow object of a certain class in the __init__ of that same class
我正在尝试创建一个名为 Theme
的 class,其 __init__
函数允许传入另一个可能属于 Theme
类型的对象。但是当我尝试键入提示允许该类型的对象时,Python 会抛出错误,因为 Theme
尚未定义。这是代码,当我取出类型提示时它起作用:
from typing import Union
class Theme:
def __init__(self, start: Union[dict, Theme, None] = None):
if start is None:
start = {}
elif isinstance(start, Theme):
start = start.dict
self.dict = start
我得到的错误是:
Traceback (most recent call last):
File "C:/Users/.../Test.py", line 4, in <module>
class Theme:
File "C:/Users/.../Test.py", line 6, in Theme
def __init__(self, start: Union[dict, Theme, None] = None):
NameError: name 'Theme' is not defined
我有什么办法可以做到这一点,还是根本不可能,我不应该费心?
您可以从 __future__
导入注释。我认为在 3.10 中这是默认可用的。
from __future__ import annotations
from typing import Optional
class MyClass:
def __init__(self, cls: Optional[MyClass]) -> None:
if cls:
print(isinstance(cls, MyClass))
c = MyClass(None)
b = MyClass(c)
我正在尝试创建一个名为 Theme
的 class,其 __init__
函数允许传入另一个可能属于 Theme
类型的对象。但是当我尝试键入提示允许该类型的对象时,Python 会抛出错误,因为 Theme
尚未定义。这是代码,当我取出类型提示时它起作用:
from typing import Union
class Theme:
def __init__(self, start: Union[dict, Theme, None] = None):
if start is None:
start = {}
elif isinstance(start, Theme):
start = start.dict
self.dict = start
我得到的错误是:
Traceback (most recent call last):
File "C:/Users/.../Test.py", line 4, in <module>
class Theme:
File "C:/Users/.../Test.py", line 6, in Theme
def __init__(self, start: Union[dict, Theme, None] = None):
NameError: name 'Theme' is not defined
我有什么办法可以做到这一点,还是根本不可能,我不应该费心?
您可以从 __future__
导入注释。我认为在 3.10 中这是默认可用的。
from __future__ import annotations
from typing import Optional
class MyClass:
def __init__(self, cls: Optional[MyClass]) -> None:
if cls:
print(isinstance(cls, MyClass))
c = MyClass(None)
b = MyClass(c)