关于python类方法相关的问题?

关于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

回到顶部