python - 调用 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'
解决方案
问题不仅仅是缩进。__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
捕获这些值。
推荐阅读
- javascript - Flutter webview_flutter:无法使用 java 脚本代码检测平台
- qt - 如何为 QML Map 保存和加载 Cashe?
- swift - Swift 项目中的版本控制
- react-native - 签名的构建是恒定的(不更新),而未签名的构建很好
- java - DateRangePicker 在今天前一个月设置限制
- python - 在一个平台上实现 Apache2 + Django + Vuejs
- javascript - 使用 npm,我可以依赖 git 分支而不是来自 monorepo 的范围包吗
- error-handling - 如何处理 knex 中的错误
- c++ - 为什么这些无锁引用计数实现不会爆炸(或者它们会爆炸)?
- google-apps-script - 是否需要将 setActiveCell 替换为 getActiveCell 或 setActiveRange?