Какова цель класса, наследующего Generic в Python? - PullRequest
1 голос
/ 05 ноября 2019

В чем разница между этими двумя кодами?

from typing import TypeVar, Generic
from logging import Logger

T = TypeVar('T')

class LoggedVar(Generic[T]):
    def __init__(self, value: T, name: str, logger: Logger) -> None:
        self.name = name
        self.logger = logger
        self.value = value

и

from typing import TypeVar
from logging import Logger

T = TypeVar('T')

class LoggedVar:
    def __init__(self, value: T, name: str, logger: Logger) -> None:
        self.name = name
        self.logger = logger
        self.value = value

Я не мог понять, что такого особенного в том, что Generic является базовым классом LoggedVar. Может кто-нибудь, пожалуйста, объясните мне это?

Спасибо.

1 Ответ

2 голосов
/ 05 ноября 2019

Первая версия является универсальным классом. LoggedVar[int] - это специализация класса, которая принимает int в качестве аргумента value в своем конструкторе. Если бы в классе было какое-либо другое использование T, значение T должно было бы совпадать.

Вторая версия - это неуниверсальный класс с универсальным методом __init__. T будет выводиться по-разному, в зависимости от того, что value вы передаете, но нет способа объявить специализации класса, такие как LoggedVar[int], и если бы другие методы использовали T, это были бы отдельные универсальные методы,без требования, чтобы T соответствовало тому, что было выведено для __init__.

...