在python3中使用类型遇到的问题,代码如下:

想在factory创建自已,以为类型是这样的-> People

1
2
3
4
5
6
7
8
9
class People:
name: str

def __init__(self, name: str) -> None:
self.name = name

@classmethod
def factory(cls, name: str) -> People:
return cls(name)

这样的错的

正确的写法是这样的:

1
2
3
4
5
6
7
8
9
10
11
12
13
from typing import TypeVar, Type

T = TypeVar('T', bound='People')

class People:
name: str

def __init__(self, name: str) -> None:
self.name = name

@classmethod
def factory(cls: Type[T], name: str) -> T:
return cls(name)

要写成泛型才对,问题地址:https://github.com/python/peps/pull/89

另一种方法

类型写成字符串也是可以的

1
2
3
4
5
6
7
8
9
class People:
name: str

def __init__(self, name: str) -> None:
self.name = name

@classmethod
def factory(cls, name: str) -> "People":
return cls(name)