python - 如何测试一个类及其方法
问题描述
Python新手,遇到一个错误,我不确定如何修复。试图回答一个家庭作业问题。我对如何测试类及其方法有点困惑,这是问题的第 2 部分。有没有特别的做法?
根据以下规范编写一个类来表示产品:
类名:Product(注意大写“P”)
定义由字典对象 product2 中的项目指定的实例属性,即停产、lead_time_days 等。
定义一个init () 方法,将实例属性初始化为传递给该方法的参数值
定义一个 set_product_name() 方法,将实例变量中的 product_name 设置为传递的参数的值
定义一个 get_product_details() 方法,该方法返回格式为“product_name - product_description”的产品详细信息
定义类后,您需要测试类及其方法以证明它有效。您可以按如下方式执行此操作:
实例化类的一个对象(将其命名为 prod)并将 product2 传递给初始化程序(传递整个 product2 对象,而不是单个属性)
通过调用 set_product_name() 并将其传递给适当的参数,将 product_name 设置为不同的名称
调用 get_product_details() 获取产品名称和描述(并打印出来)
代码:
product2 = {
"discontinued": 0,
"lead_time_days": 4,
"product_category": "Personal Computers",
"product_description": "8 inch Display (1920x1200) ...",
"product_id": 104,
"product_name": "NVIDIA SHIELD Tablet (WiFi)",
"reorder_level": 10,
"unit_price": 299.0
}
# My Code
class Product:
def __init__(self, discontinued, lead_time_days, product_category, product_description, product_id, product_name, reorder_level, unit_price):
self.discontinued = discontinued
self.product_category = product_category
self.product_description = product_description
self.product_id = product_id
self.product_name = product_name
self.reorder_level = reorder_level
self.unit_price = unit_price
def set_product_name(self, value):
self.product_name = value
def get_product_details(self):
return self.product_name + " " + self.product_description
编辑 1
我试过了,但我知道它错了。
prod = Product(product2["discontinued"], product2["product_category"], product2['product_description'], product2['product_id'], product2['product_name'],product2['reorder_level'],product2['unit_price'])
prod.set_product_name('star')
print ('get_product_details'())
解决方案
专业提示:使用解包将关键字参数传递给类方法。
这可以通过将您的类更改为以下内容来完成:
class Product:
def __init__(self, discontinued=None, lead_time_days=None, product_category=None, product_description=None, product_id=None, product_name=None, reorder_level=None, unit_price=None):
self.discontinued = discontinued
self.product_category = product_category
self.product_description = product_description
self.product_id = product_id
self.product_name = product_name
self.reorder_level = reorder_level
self.unit_price = unit_price
def set_product_name(self, value):
self.product_name = value
def get_product_details(self):
return self.product_name + " " + self.product_description
通过为您的参数提供默认值(例如,discontinued=None),它使它们成为关键字参数。如果您有字典或函数的大量输入,这将很有帮助。
要创建对象/实例化类,您可以调用:
obj = Product(**product2)
**product2 基本上是指:
discontinued=0,lead_time_days=4,product_category="Personal Computers",product_description="8 inch Display (1920x1200) ...",product_id=104,product_name="NVIDIA SHIELD Tablet (WiFi)",reorder_level=10,unit_price=299.0
实例化对象后,您可以使用点表示法调用其方法:
obj.set_product_name('new name')
print(obj.get_product_details())
推荐阅读
- uwp - 桌面扩展:在后台运行还是关闭?
- python - python中dict.clear()的时间复杂度是O(1)如何?
- laravel - laravel 5.7 中的服务层
- php - 如何为不同目录中的相似表单设置 CodeIgniter 控制器
- indexing - 当您有 2 个值时如何使用索引匹配?
- go - 对这些 golang 并发问题感到困惑
- javascript - Wordpress AJAX 如何实现服务器端响应
- arrays - 从Ruby中的整数除法制作数组的正确方法
- forms - Symfony 表单 - 数据时间添加 +30 分钟
- android - Android:在带有图像,文本和自定义边框的按钮上添加按下效果