Тайна разрешения метода Python

Я не могу понять, почему эта программа дает сбой.

#!/usr/bin/env python
from __future__ import division, print_function
from future_builtins import *
import types
import libui as ui
from PyQt4 import QtCore
import sip

p = ui.QPoint()
q = QtCore.QPoint()

def _q_getattr(self, attr):
    print("get %s" % attr)
    value = getattr(sip.wrapinstance(self.myself(), QtCore.QPoint), attr)
    print("get2 %s returned %s" % (attr, value))
    return value

p.__getattr__ = types.MethodType(_q_getattr, p)

print(p.__getattr__('x')())  # Works!  Prints "0"
print(p.x())  # AttributeError: 'QPoint' object has no attribute 'x'

Я использовал Boost.Python для создания libui, которая предоставляет класс QPoint. Я также включил PyQt4, в котором есть QPoint с поддержкой sip. Я пытаюсь выполнить сопоставление между двумя типами.

Я проверил, что p - это класс нового стиля, так почему же __ getattr __ не вызывается для ] px () ?

5
задан Mike Pennington 25 November 2011 в 12:10
поделиться