关于python类方法相关的问题?
关于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
python">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__
。
以上是 关于python类方法相关的问题? 的全部内容, 来源链接: utcz.com/p/938774.html