2016-11-02 7 views
2

Когда я пытаюсь совместить Тип подсказки и создание объекта через classmethod я получаю следующее NameError:Тип-подсказки: Как я могу указать, что я хочу вернуть экземпляр фактического класса?

NameError: name 'Person' is not defined 

Как я могу указать через типа намекая, что я хочу, чтобы вернуть экземпляр класса, который я я в настоящее время определяю? (Смотри пример)


Пример:

Определение classmethodfrom_dict терпит неудачу, потому что Python не может разрешить class Person.

class Person: 

    def __init__(self, name: str): 
     self.name = name 

    @classmethod 
    def from_dict(self, info: dict) -> Person: 
     person_obj = Person(info['name']) 
     return person_obj 

    def speak(self, word: str) -> str: 
     print(word) 
     return self.name + 'said' + word 

ответ

2

Вам необходимо использовать TypeVar.

from typing import TypeVar 
PersonType = TypeVar("PersonType", bound="Person") 

class Person: 
    @classmethod 
    def from_dict(self, info: dict) -> PersonType: 
     person_obj = Person(info['name']) 
     return person_obj 

 Смежные вопросы

  • Нет связанных вопросов^_^