登录
首页 >  文章 >  python教程

使用 Python Pointer 类和类型类实现带语法提示的指针时,如何解决实例化时使用 type 函数重新生成类导致实例类型不等于该类的问题?

时间:2024-12-10 18:48:44 115浏览 收藏

最近发现不少小伙伴都对文章很感兴趣,所以今天继续给大家介绍文章相关的知识,本文《使用 Python Pointer 类和类型类实现带语法提示的指针时,如何解决实例化时使用 type 函数重新生成类导致实例类型不等于该类的问题? 》主要内容涉及到等等知识点,希望能帮到你!当然如果阅读本文时存在不同想法,可以在评论中表达,但是请勿使用过激的措辞~

使用 Python Pointer 类和类型类实现带语法提示的指针时,如何解决实例化时使用 type 函数重新生成类导致实例类型不等于该类的问题?

修改导入类的类型

问题:

使用 python pointer 类(作为第一个类继承)和类型类(作为第二个类继承)实现带有语法提示的指针时,如果在实例化时使用 type 函数重新生成一个类,导致实例的类型不等于该类。该如何解决?

已尝试的解决方案:

new 函数移到类的外部,但会增加创建带有类型指针类的难度。

解决方案:

使用 init_subclass 方法,而不是 new 方法。

代码:

class Pointer:

    def __init_subclass__(cls, **kwargs):
        bases = tuple(set(cls.__bases__) - {Pointer})
        assert len(bases) <= 1, '只能再继承一个类'
        assert len(bases), '必须再继承一个类'
        bases = bases[0]
        for fun_name in dir(cls):
            if fun_name not in not_transfer_fun and callable(getattr(cls, fun_name)):
                setattr(cls, fun_name, fun_transfer(getattr(cls, fun_name)))
        cls.__init__ = __init__
        cls.__setattr__ = __setattr__
        cls.__getattribute__ = __getattribute__
        cls.__value__ = None
        print(cls.__class__)
        cls.__class__ = cls
        cls.__type__ = bases
        return cls

今天关于《使用 Python Pointer 类和类型类实现带语法提示的指针时,如何解决实例化时使用 type 函数重新生成类导致实例类型不等于该类的问题? 》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

相关阅读
更多>
最新阅读
更多>
课程推荐
更多>