首页 > 解决方案 > 如何测试一个类及其方法

问题描述

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'())

标签: python

解决方案


专业提示:使用解包将关键字参数传递给类方法。

这可以通过将您的类更改为以下内容来完成:

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())

推荐阅读