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

作者站长头像
站长
· 阅读数 7

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

环境:windows11 x64python3.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>
回复
1个回答
avatar
test
2024-07-08

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

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容