如何动态修改类的魔法方法?

如何动态修改类的魔法方法?

  我希望用python做个指针类,它可以被多重继承,然后拥有多重继承的第二个类的方法和代码提示,但它好像并不能调用被指向对象的魔法方法
  我不希望在Pointer类里面重写所有魔法方法,不仅是因为麻烦,更是因为这样没有代码提示了

环境:
windows11 x64
python3.9
  • Pointer.py

    class Pointer:

    def __new__(cls, *args, **kwargs):

    if cls == Pointer:

    return super().__new__(cls)

    if 'cls_' in kwargs:

    kwargs.pop('cls_')

    return Pointer(*args, **kwargs, cls_=cls)

    def __init__(self, value=None, *, cls_=None):

    self.__interior = True

    self.__value = value

    for i in dir(value):

    if i != '__class__':

    if i in cls_.__dict__:

    # print(i)

    setattr(self, i, cls_.__dict__[i])

    try:

    setattr(self, i, getattr(value, i))

    except AttributeError:

    pass

    self.__interior = False

    class StrPointer(Pointer, str):

    pass

  • test.py

    from Pointer import StrPointer

    s = StrPointer('a')

    print(s.__str__())

    print(s)

  • 输出

    a

    <Pointer.Pointer object at 0x0000020C8200A850>


回答:

print 用的是 str ,它用的 type(object).__str__(object) 。把 __str__ 放到 self 里是没有用的。因为它用的不是 object.__str__

以上是 如何动态修改类的魔法方法? 的全部内容, 来源链接: utcz.com/p/938785.html

回到顶部