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

    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
阅读 1.5k
1 个回答

print 会把参数通过 str 转换成 str ,然而 str 转换 str 的方式是: type(object).__str__(object) 。(注意不是 object.__str__() )这种调用方式不会调用这里定义的 __getattribute__

在 Pointer 里直接定义一个 __str__ 就可以用到 Pointer 的 __str__

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题