Je veux utiliser classmethod pour retourner une nouvelle instance de la classe actuelle, et j'ai essayer un code comme ci-dessous, mais il élever un NameError ('nom « T » est pas défini)Comment faire pour que le vérificateur de type python sache qu'il devrait retourner une nouvelle instance de sa classe?
Mettez le code T = TypeVar('T', bound=A)
sur class A
ci-dessus ne fonctionne pas non plus.
Y a-t-il une bonne idée pour le gérer?
import json
from typing import TypeVar
class A(dict):
def __init__(self, name):
super(dict, self).__init__()
self["name"] = name
@classmethod
def foo(cls: T, args: str)->T:
return json.loads(args)
T = TypeVar('T', bound=A)
class B(A):
pass
b = B(name='B')
# True
print(isinstance(b.foo(json.dumps(b)),B))
Merci beaucoup. Cela fonctionne, mais je ne pouvais voir aucun indice sur pycharm. Cela ressemble à un bug de cet EDI parce que pycharm n'implémente pas complètement la norme pep484 [pycharm 2017.1.3]. – FavorMylikes