繁体   English   中英

__init_subclass__ 时的打字和 IDE 支持

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM