python类中方法返回自身值类型的写法

在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)

pip安装模块出现neither-setup.py-nor-pyproject.toml-found

使用pip安装模块时出现neither 'setup.py' nor 'pyproject.toml' found.导致模块无法安装

因为根据打包方案,项目中需要一个setup.py或pyproject.toml用于生成包的配置文件,然而模块里没有按照这个规定来

网上搜了一遍,没找到解决方案

只能选择手动安装

https://pypi.org/,找到相应的包,下载下来解压到python的Lib目录

windows下缺失fcntl报错

windows下运行python项目,报错ModuleNotFoundError: No module named 'fcntl'

fcntl库是linix的Python发行版才有,windows没有带

方法一

pip安装缺失的包,这个地址去搜索https://libraries.io/search?q=micropython

1
pip install micropython-xxx

仓库地址:https://github.com/micropython/micropython

方法二

在python库文件目录D:\Python\Python38\Lib\site-packages中创建’fcnty文件,内容为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
def fcntl(fd, op, arg=0):
return 0

def ioctl(fd, op, arg=0, mutable_flag=True):
if mutable_flag:
return 0
else:
return ""

def flock(fd, op):
return

def lockf(fd, operation, length=0, start=0, whence=0):
return