如何动态修改类的魔法方法?
我希望用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个回答
test
2024-07-08
print
用的是 str
,它用的 type(object).__str__(object)
。把 __str__
放到 self
里是没有用的。因为它用的不是 object.__str__
。
回复
适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容