Как использовать общую функцию, определенную в Python?Python

Программы на Python
Anonymous
Как использовать общую функцию, определенную в Python?

Сообщение Anonymous »

У меня есть класс и соответствующая фабричная функция, которая сохраняет некоторое состояние в замыкании (

Код: Выделить всё

event_bus
):

Код: Выделить всё

from typing import TypeVar, Generic, Callable, Any

class EventBus:

def subscribe(self):
print("Subscribed")

def publish(self):
print("Published")

T = TypeVar('T')

def create_property(event_bus: EventBus):
class Property(Generic[T]):
def __init__(self, validator: Callable[[T], bool]):
self._validator = validator

def __set_name__(self, obj: Any, name: str):
self.name = name

def __get__(self, obj: Any, type: Any) -> T:
return obj.__dict__.get(self.name)

def __set__(self, obj: Any, value: T):
if not self._validator(value):
raise ValueError("Invalid value")
obj.__dict__[self.name] = value
event_bus.publish()

def property(validator: Callable[[T], bool] = lambda x: True) -> Property[T]:
return Property(validator)

return property
Теперь это компилируется, и функция свойства имеет правильный тип: Callable[..., Property[T]]. Свойство можно использовать в качестве дескриптора, но когда я пытаюсь это сделать, я получаю ошибки компилятора:

Код: Выделить всё

property: Callable[..., Property[T]] = create_property(event_bus.EventBus())

class MyComponent:

width = property() # Type of "width" is partially unknown
# Type of "width" is "Property[Unknown]
height: int = property(lambda x: x > 0) # Expression of type "Property[Unknown]" is
# incompatible with declared type "int"
Что я делаю не так? Как правильно вызвать функцию универсального свойства?


Подробнее здесь: https://stackoverflow.com/questions/790 ... -in-python

Вернуться в «Python»