关于python类方法相关的问题
提问:我希望调用getattribute来查找str的方法,但它却直接调用了str的方法,有什么办法可以解决吗
或者说,我希望在调用时调用的是类的变量__value的方法,而不是类的方法
编写环境:
- python3.9
- windows11 x64
Pointer.py
class Pointer: def __init__(self, value=None): self.__interior = True self.__value = value self.__interior = False def __getattribute__(self, item): print(1, item) if super().__getattribute__('_Pointer__interior'): return super().__getattribute__(item) if item == '__value' or item == '_Pointer__value': return super().__getattribute__('_Pointer__value') return getattr(super().__getattribute__('_Pointer__value'), item) def __setattr__(self, item, value): if item == '_Pointer__interior': super().__setattr__('_Pointer__interior', value) elif super().__getattribute__('_Pointer__interior'): super().__setattr__(item, value) else: if item == '__value' or item == '_Pointer__value': super().__setattr__('_Pointer__value', value) else: setattr(super().__getattribute__('__value'), item, value) class StrPointer(Pointer, str): pass
test.py
from Pointer import StrPointer s = StrPointer('a') print(s) s.__value = 'b' print(s) print(s.__str__) print(s.__value) print(s + '1')
输出
a a 1 __str__ <method-wrapper '__str__' of str object at 0x0000019167F2AEF0> 1 __value b a1
print
会把参数通过str
转换成 str ,然而str
转换 str 的方式是:type(object).__str__(object)
。(注意不是object.__str__()
)这种调用方式不会调用这里定义的__getattribute__
在 Pointer 里直接定义一个
__str__
就可以用到 Pointer 的__str__
。