Используя __getattribute__ или __getattr__ для вызова методов на Python

Я пытаюсь создать подкласс, который будет действовать как список пользовательских классов. Однако, Я хочу, чтобы список унаследовал методы и атрибуты родительского класса и вернул сумму количества каждого элемента. Я пытаюсь сделать это с помощью метода __getattribute__, но не могу понять, как передать аргументы вызываемым атрибутам. Весьма упрощенный код, приведенный ниже, должен быть более понятен.

class Product:
    def __init__(self,price,quantity):
        self.price=price
        self.quantity=quantity
    def get_total_price(self,tax_rate):
        return self.price*self.quantity*(1+tax_rate)

class Package(Product,list):
    def __init__(self,*args):
        list.__init__(self,args)
    def __getattribute__(self,*args):
        name = args[0]
    # the only argument passed is the name...
        if name in dir(self[0]):
            tot = 0
            for product in self:
                tot += getattr(product,name)#(need some way to pass the argument)
            return sum
        else:
            list.__getattribute__(self,*args)

p1 = Product(2,4)
p2 = Product(1,6)

print p1.get_total_price(0.1) # returns 8.8
print p2.get_total_price(0.1) # returns 6.6

pkg = Package(p1,p2)
print pkg.get_total_price(0.1) #desired output is 15.4.

На самом деле у меня есть много методов родительского класса, которые должны быть вызываемыми. Я понимаю, что мог бы вручную переопределить каждый из них для лестального подкласса, но хотелось бы этого избежать, так как в будущем в родительский класс может быть добавлено больше методов, и мне бы хотелось иметь динамическую систему. Любые советы и предложения приветствуются. Спасибо!

10
задан Karl Knechtel 30 August 2011 в 19:57
поделиться