[英]Typing and IDE support while __init_subclass__
我的目标是简化测试。 我注意到每个 api 测试都使用 TestClient 类和查询包装器。
import pytest
class UserWrapper:
def get_user(self):
...
class EventWrapper:
def get_event(self):
...
class Base:
@pytest.fixture(autouse=True)
def setup(self, client):
self.client = client
def __init_subclass__(cls, wrapper, **kwargs):
cls.wrapper = wrapper
class TestUserApi(Base, wrapper=UserWrapper()):
def test_create(self):
resp = self.client.post(...)
assert self.wrapper.get_user(resp.json())
class TestEventApi(Base, wrapper=EventWrapper()):
def test_create(self):
resp = self.client.post(...)
assert self.wrapper.get_event(resp.json())
问题是我想在某个地方键入包装类以使其具有 IDE 支持(例如转到声明和自动完成)。 我试过
class TestEventApi(Base, wrapper: EventWrapper=EventWrapper()):
但它不解析。 我试过:
def __init_subclass__(cls, wrapper: Union[UserWrapper, EventWrapper], **kwargs):
但我的 pyright 抱怨: cannot access member get_user of type EventWrapper
如果不为每个测试文件创建额外的类,我该怎么办?
为什么还要打扰__init_subclass__
?
class Base:
@pytest.fixture(autouse=True)
def setup(self, client):
self.client = client
class TestUserApi(Base):
wrapper = UserWrapper()
def test_create(self):
resp = self.client.post(...)
assert self.wrapper.get_user(resp.json())
class TestEventApi(Base):
wrapper = EventWrapper()
def test_create(self):
resp = self.client.post(...)
assert self.wrapper.get_event(resp.json())
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.