gpt4 book ai didi

Python AssertionError 创建一个类

转载 作者:太空宇宙 更新时间:2023-11-04 09:48:50 24 4
gpt4 key购买 nike

我有一个用户类和一个主题类。用户类可以创建一个主题,将一个主题添加到主题的字典中,并且应该能够返回主题的字典。我是 python 的新手,所以我在 python 逻辑/语法方面遇到了问题

class User:
def __init__(self, name):
self.themes = {}

def createTheme(self, name, themeType, numWorkouts, themeID, timesUsed):
newTheme = Theme(name, themeType, numWorkouts, themeID, timesUsed)
return newTheme

和我的主题类:

class Theme:
def __init__(self, name, themeType, numWorkouts, themeID, timesUsed):
#themeType: 1 = genre, 2 = artist, 3 = song
self.name = name
self.themeType = themeType
self.numWorkouts = numWorkouts
self.themeID = themeID
self.timesUsed = timesUsed

我在 testUser 中运行测试:

## test createTheme
theme1 = Theme("theme", 2, 5, 1, 0)
self.assertEqual(usr1.createTheme("theme", 2, 5, 1, 0), theme1)

但我明白了——追溯(最近一次通话): 文件“/Tests/testUser.py”,第 52 行,在测试中 self.assertEqual(usr1.createTheme("主题", 2, 5, 1, 0), theme1)断言错误:!=

我不确定我做错了什么,有人可以帮忙吗?

(此外,我在 User 中有以下方法,但由于我的 createTheme 不起作用,所以还无法测试它们,但我可以使用一些帮助来查看我的逻辑/语法是否有错误:

# returns dict
# def getThemes(self):
# return self.themes
#
# def addTheme(self, themeID, theme):
# if theme not in self.themes:
# themes[themeID] = theme
#
# def removeTheme(self, _theme):
# if _theme.timesUsed == _theme.numWorkouts:
# del themes[_theme.themeID]

最佳答案

发生了什么

当试图确定两个对象是否相等时,比如 obj1 == obj2,Python 将执行以下操作。

  1. 它会首先尝试调用obj1.__eq__(obj2),这是一个方法定义在 obj1 的类中,它应该确定的逻辑平等。

  2. 如果这个方法不存在,或者返回NotImplemented,那么Python 返回调用 obj2.__eq__(obj1)

  3. 如果这仍然没有定论,Python 将返回 id(obj1) == id(obj2), 即它会告诉您这两个值是否是内存中的同一个对象。

在您的测试中,Python 必须回退到第三个选项,并且您的对象是 Theme 类的两个不同实例。

你想要发生什么

如果你期望对象 Theme("theme", 2, 5, 1, 0)usr1.createTheme("theme", 2, 5, 1, 0) 要相等,因为它们具有相同的属性,您必须像这样定义 Theme.__eq__ 方法。

class Theme:
def __init__(self, name, themeType, numWorkouts, themeID, timesUsed):
#themeType: 1 = genre, 2 = artist, 3 = song
self.name = name
self.themeType = themeType
self.numWorkouts = numWorkouts
self.themeID = themeID
self.timesUsed = timesUsed

def __eq__(self, other)
# You can implement the logic for equality here
return (self.name, self.themeType, self.numWorkouts, self.themeID) ==\
(other.name, other.themeType, other.numWorkouts, other.themeID)

请注意,我将属性包装在元组中,然后比较元组的可读性,但您也可以一个一个地比较属性。

关于Python AssertionError 创建一个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48716678/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com