在python类型中,如何指示参数应该是对派生类的引用?
我希望将类本身作为构造函数中的参数传递。我知道这在Python中是可能的,但我在理解如何编写正确的类型注释时遇到了问题。用例如下所示: 在类在python类型中,如何指示参数应该是对派生类的引用?,python,python-3.x,inheritance,typing,Python,Python 3.x,Inheritance,Typing,我希望将类本身作为构造函数中的参数传递。我知道这在Python中是可能的,但我在理解如何编写正确的类型注释时遇到了问题。用例如下所示: 在类A的构造函数中,我想传递一个对在BaseX之后继承的某个类X(不是类X的对象)的引用。X和BaseX都来自一个库。除了对X的引用之外,A的构造函数还接受有助于构建X的参数: #库 BaseX类: def func(): 打印(“Hey BaseX”) X类(BaseX): def func(): 打印(“X!”) #我的客户代码 A类: def uu ini
A
的构造函数中,我想传递一个对在BaseX
之后继承的某个类X
(不是类X
的对象)的引用。X
和BaseX
都来自一个库。除了对X
的引用之外,A
的构造函数还接受有助于构建X
的参数:
#库
BaseX类:
def func():
打印(“Hey BaseX”)
X类(BaseX):
def func():
打印(“X!”)
#我的客户代码
A类:
def uu init uu(arg x,arg y,layer:BaseX):#layer的注释应该是什么?
#构造BaseX对象
self.layer=BaseX(x=x,y=y)#IDE将x和y显示为意外参数,因为它们将BaseX视为一个对象并查看其_调用_函数
A(5,6,X)
我不确定如何表达层的注释,以便将其视为一个类,并确保其为BaseX
的派生。我还想问一些关于这是否是一种蟒蛇式的方法的评论
干杯 您可以使用注释
type[BaseX]
指示变量是对类型的引用(请参阅)。用Type[T]
注释的变量保存属于T
子类型的任何类型
对于“构造指定类型的对象(它是BaseX
的子类型)”的特定用例,您可以在的帮助下使用更精确的注释。例如:
T=TypeVar('T',bound=BaseX)
def构造(cls:Type[T],*args,**kwargs)->T:
返回cls(*args,**kwargs)
在这里:
定义了一个“类型变量”,可以用TypeVar('T',bound=BaseX)
定义的任何类型“bounded”替换,即是BaseX
的子类型BaseX
函数接受一个带有注释的参数construct
,表示它是对cls
的子类型的引用BaseX
- 返回类型注释为
,表示返回值是T
子类型的实例BaseX
- 函数或类中所有出现的类型变量都绑定到同一类型。在本例中,返回值的类型是作为参数传递的类型