在 Python 3.6 中使用列表定义自定义类型提示
Define custom type hint with lists in Python 3.6
我正在尝试定义一个新的类型提示,但是,它不允许我在 Python 3.6 中这样做,我想知道是否有任何解决方法。这是我的示例代码,我想要自己的 class 将列表作为字段:
class T(type):
def __new__(cls, nums):
return super().__new__(cls, f'T((nums))', (T,),{})
def __init__(self, nums):
self.__origin__ = T
self.__args__ = nums
每当我尝试实际使用它时,我都会得到
'type' object is not subscriptable
如果我定义了一个不涉及列表的自定义类型提示,代码就可以工作。无论如何我可以在 python3.6?
中定义自定义类型提示
您需要了解类型提示是针对对象(或数据类型)的。您无法创建继承自 type
的自定义 class。如果你想创建一个新的数据类型,那么简单地继承自 object
。虽然,甚至没有必要从对象继承,因为在 python 中一切都是对象,但它通常被认为是一种很好的做法。
class T(object):
def __init__(self, val):
self.__val = val
def __str__(self):
return self.__val
t = T(10)
print(t) # 10
print(type(t)) # <class '__main__.T'>
我正在尝试定义一个新的类型提示,但是,它不允许我在 Python 3.6 中这样做,我想知道是否有任何解决方法。这是我的示例代码,我想要自己的 class 将列表作为字段:
class T(type):
def __new__(cls, nums):
return super().__new__(cls, f'T((nums))', (T,),{})
def __init__(self, nums):
self.__origin__ = T
self.__args__ = nums
每当我尝试实际使用它时,我都会得到
'type' object is not subscriptable
如果我定义了一个不涉及列表的自定义类型提示,代码就可以工作。无论如何我可以在 python3.6?
中定义自定义类型提示您需要了解类型提示是针对对象(或数据类型)的。您无法创建继承自 type
的自定义 class。如果你想创建一个新的数据类型,那么简单地继承自 object
。虽然,甚至没有必要从对象继承,因为在 python 中一切都是对象,但它通常被认为是一种很好的做法。
class T(object):
def __init__(self, val):
self.__val = val
def __str__(self):
return self.__val
t = T(10)
print(t) # 10
print(type(t)) # <class '__main__.T'>