首页 > 编程问答 >有没有办法在 python 中返回类实例的布尔属性?

有没有办法在 python 中返回类实例的布尔属性?

时间:2024-07-30 03:55:16浏览次数:13  
标签:python

我想组织我玩的游戏中的汽车数据。为此,我创建了一个“Car”类。我希望将此类实例的一些属性作为布尔值,这样我就可以将此类的所有实例放入列表中并过滤它们。

我当前的解决方案不起作用,因为,我收到以下错误消息:

TypeError: __repr__ returned non-string (type Car)

我使用 __repr__ 方法来获得可读的结果。该代码无需 __repr__ 方​​法即可工作,但我的结果如下所示:

<__main__.Car object at 0x0000026FAB7960F0>

是否有可以返回布尔值的方法? 或者除了将所有属性更改为字符串之外还有其他选择吗?

这里是我的代码摘录:

l = []
class Car:
    def __init__(self, MRSP : int, bid : int, buy : int, stock : bool, sellworthy : bool):
        self.MRSP = MRSP
        self.bid = bid
        self.buy = buy
        self.stock = stock
        self.sellworthy = sellworthy
        l.append(self)

    def __repr__(self):
        return Car(self.MRSP, self.bid, self.buy, self.stock, self.sellworthy)
    
Acura_NSX_2017 = Car(170000, "NA", "NA", True, True)
Acura_RSX_Type_S_2002 = Car(25000, "NA", "NA", True, False)
Acura_Integra_Type_R_2001 = Car(25000, "NA", "NA", True, False)

def what_sell(l):
    res = []
    for elements in l:
        if elements.sellworthy == True:
            res.append(elements)
    print(res, end="")

what_sell(l)

错误来自于的 __repr__ 方法返回一个 Car 对象而不是字符串。此方法用于为调试目的提供类的字符串表示形式。 尝试递归地创建 Car 对象,从而导致错误。

以下是如何解决的代码的方法:

class Car:
    def __init__(self, MRSP: int, bid: int, buy: int, stock: bool, sellworthy: bool):
        self.MRSP = MRSP
        self.bid = bid
        self.buy = buy
        self.stock = stock
        self.sellworthy = sellworthy

    def __repr__(self):
        # 这将返回类的更有意义的字符串表示形式
        return f"Car(MRSP={self.MRSP}, bid={self.bid}, buy={self.buy}, stock={self.stock}, sellworthy={self.sellworthy})"

l = []
Acura_NSX_2017 = Car(170000, "NA", "NA", True, True)
Acura_RSX_Type_S_2002 = Car(25000, "NA", "NA", True, False)
Acura_Integra_Type_R_2001 = Car(25000, "NA", "NA", True, False)

l.append(Acura_NSX_2017)
l.append(Acura_RSX_Type_S_2002)
l.append(Acura_Integra_Type_R_2001)

def what_sell(l):
    res = []
    for elements in l:
        if elements.sellworthy:
            res.append(elements)
    return res  # 返回结果列表

result = what_sell(l)
print(result)

在这个修改后的代码中:

  1. 我们更正了 __repr__ 方法 以返回描述 Car 对象的字符串。
  2. 我们将 Car 对象显式追加到列表 l 中。
  3. 我们修改了 what_sell 函数以返回结果列表 ,这是一种更干净的方法来返回和使用结果。

现在,该代码应该可以正常运行并按预期过滤汽车。

标签:python
From: 78808751

相关文章

  • python 正则表达式匹配一行中的多个单词而不转到下一行
    我正在编写一个解析器来解析以下输出:admin@str-s6000-on-5:~$showinterfacestatusEthernet4InterfaceLanesSpeedMTUAliasVlanOperAdminTypeAsymPFC------------------------------------------......
  • 使用 Python 平滑和对称不规则形状和曲线
    我需要完成三项任务:正则化曲线曲线的对称性完成不完整的曲线例如,这里是输入和预期的输出图像:输入输出|||在一般设置中,形状可以由任何SVG曲线基元(贝塞尔曲线、直线、弧线)表示。为了统一表示,示例包含曲线的折线近似。这些折线保存为......
  • 在Python中通过绝对路径引用数据文件夹
    我有一个大型python项目,其中数据太大,无法每次都以相同的方式共享。不同的人可能会使用网络位置或将某些内容复制到本地驱动器。该路径由不同子文件夹中的脚本和笔记本使用。例如,我将创建一个config.py来定义数据文件夹的路径。importsyssys.path.append('../'......
  • python三天速成记(看完你就会)day3 满满干货~
    续上文啦~EXCEL表的操作上一篇文章讲了怎么读取和操作txt和csv文档,但其实我们生活中还有一个常用的文本格式那就是excel文件,特别是在对大量数据进行处理的时候。excel文件的用处和广泛。其实在python中有很多库可以处理excel文件,但是本文主要介绍使用最实用最广泛的库pan......
  • Python输入验证改进的其他方式
    题目[题目来源:Python编程快速上手——让繁琐工作自动化(第二版)第三章实践项目,下面的解答程序为我自己完成的,仅供参考。]编写一个名为collatz()的函数,他有一个名为number的参数。如果参数是偶数,那么collatz()就输出number//2,并返回该值。如果参数是奇数,那么collatz()就......
  • Python的PyInputPlus模块
    PyInputPlus模块简介PyInputPlus模块的功能:PyInputPlus模块是一个Python第三方模块,需要自己对它进行安装。包含与input()函数类似的、用于多种数据(如日期、数字、电子邮箱地址等)的函数。如果,用户输入了无效的内容,例如格式错误的日期或超过预期范围的数字,那么PyInputPlus模......
  • 用Python实现二进制搜索(二分查找)
    二进制搜索(binarysearch,又称二分搜索)是一种快速有效的搜索方法,用于搜索有序列表中的元素。importmathdefbinary_search(sorted_list,target):"""在有序列表sorted_list中查找目标值target的位置使用二分查找算法"""lower_bound=0#初始......
  • 超详细Python教程——使用Hexo搭建自己的博客
    使用Hexo搭建自己的博客对于一个程序员来说,搭建一个属于自己的博客平台是非常有意义的事情。首先,博客可以记录自己的成长历程,也是对自己一段时间学习和工作的总结和沉淀;其他,通过博客可以营销自己,增强自己在互联网或行业内的影响力,为将来更好的职业生涯打一个坚实的基础。前......
  • 超详细Python教程——玩转PyCharm
    玩转PyCharmPyCharm是由JetBrains公司开发的提供给Python专业的开发者的一个集成开发环境,它最大的优点是能够大大提升Python开发者的工作效率,为开发者集成了很多用起来非常顺手的功能,包括代码调试、高亮语法、代码跳转、智能提示、自动补全、单元测试、版本控制等等。此外,P......
  • 2024年华为OD机试真题-找出作弊的人-(C++/Java/python)-OD统一考试(C卷D卷)
    2024华为OD机试真题目录-(B卷C卷D卷)-【C++JavaPython】  题目描述公司组织了一次考试,现在考试结果出来了,想看一下有没人存在作弊行为,但是员工太多了,需要先对员工进行一次过滤,再进一步确定是否存在作弊行为。过滤的规则为:找到分差最小的员工ID对(p1,p2)列表,......