首页 > 解决方案 > 调用 Discount 方法时,它不起作用

问题描述

下面例子中调用discount父类的方法抛出AttributeError

class Dress:
    def __init__(self, **kwargs):

        for key,value in kwargs.items():
            setattr(self,key,value)

        def discount(self):
            self.price = self.price - 10

class Shirt(Dress):
    def __init__(self):
        attr = {
            "color" : "red",
            "price" : "50",
            "size" : "medium"
            }

        super().__init__(**attr)

>>> a= Shirt()
>>> a.color
'red'
>>> a.discount()
Traceback (most recent call last):
  File "<pyshell#18>", line 1, in <module>
    a.discount()
AttributeError: 'Shirt' object has no attribute 'discount'

标签: pythonpython-3.xoopinheritance

解决方案


问题不仅仅是缩进。__init__函数声明不正确。price值是字符串,因此discount导致进一步的错误。这是更正后的代码:

class Dress: 
    def __init__(self, **kwargs):
        for key, value in kwargs.items():
            setattr(self,key,value)

    def discount(self):
        self.price = self.price - 10

class Shirt(Dress): 
    def __init__(self): 
        attr = { "color" : "red", "price" : 50, "size" : "medium" }
        super(Shirt, self).__init__(**attr)

a = Shirt()
print(a.price)
a.discount()
print(a.price)

同样定义一个衬衫类只是为了在里面放一些硬编码的值,这不是一个聪明的主意。使构造函数Shirt捕获这些值。


推荐阅读