MagicforestA 2022-07-14 18:34 采纳率: 100%
浏览 79
已结题

python 列表的问题

这段代码是测试copy和deepcopy的,但问题不在这里,看注释

import math
import copy
   
class Delicacy:
    def __init__(self,name,price,weight):

        self.name=name
        self.price=price
        self.weight=weight
        


    def __str__(self):
        return 'item:{}, price:{}, total weight: {}'.format(self.name,self.price,self.weight)



warehouse = list()

warehouse.append(Delicacy('Lolly Pop', 0.4, 133))
warehouse.append(Delicacy('Licorice', 0.1, 251))
warehouse.append(Delicacy('Chocolate', 1, 601))
warehouse.append(Delicacy('Sours', 0.01, 513))
warehouse.append(Delicacy('Hard candies', 0.3, 433))
new_warehouse = copy.copy(warehouse)

print(warehouse)#打印出来都是<__main__.Delicacy object at 0x000001F0A6E6E6A0>这类具体位置信息,不应该是一个都是string的列表吗
for i in new_warehouse:
    if i.weight>300:
        
      
         i.price=float(round(i.price-i.price*0.2,3))
for item in warehouse:
    print(item)



for item in new_warehouse:
    print(item)


  • 写回答

3条回答 默认 最新

  • CSDN专家-showbo 2022-07-14 20:45
    关注

    print list实例调用的list的str,list内置的str应该没调用对象的str方法,写个子类继承list,然后这个子类实现str方法可以实现打印

    
    import math
    import copy
       
    class Delicacy:
        def __init__(self,name,price,weight):
            self.name=name
            self.price=price
            self.weight=weight
            
        def __str__(self):
            return 'item:{}, price:{}, total weight: {}'.format(self.name,self.price,self.weight)
    
    class MyList(list):
        def __str__(self):
            lst=[]
            for i in self:
                lst.append(str(i))
            return str(lst)
    
    warehouse =MyList()# list()
    warehouse.append(Delicacy('Lolly Pop', 0.4, 133))
    warehouse.append(Delicacy('Licorice', 0.1, 251))
    warehouse.append(Delicacy('Chocolate', 1, 601))
    warehouse.append(Delicacy('Sours', 0.01, 513))
    warehouse.append(Delicacy('Hard candies', 0.3, 433))
    new_warehouse = copy.copy(warehouse)
    print(warehouse)#打印出来都是<__main__.Delicacy object at 0x000001F0A6E6E6A0>这类具体位置信息,不应该是一个都是string的列表吗
    for i in new_warehouse:
        if i.weight>300:
            
          
             i.price=float(round(i.price-i.price*0.2,3))
    for item in warehouse:
        print(item)
    for item in new_warehouse:
        print(item)
    
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 7月22日
  • 已采纳回答 7月14日
  • 创建了问题 7月14日

悬赏问题

  • ¥15 (标签-UDP|关键词-client)
  • ¥15 关于库卡officelite无法与虚拟机通讯的问题
  • ¥15 qgcomp混合物线性模型分析的代码出现错误:Model aliasing occurred
  • ¥100 已有python代码,要求做成可执行程序,程序设计内容不多
  • ¥15 目标检测项目无法读取视频
  • ¥15 GEO datasets中基因芯片数据仅仅提供了normalized signal如何进行差异分析
  • ¥100 求采集电商背景音乐的方法
  • ¥15 数学建模竞赛求指导帮助
  • ¥15 STM32控制MAX7219问题求解答
  • ¥20 在本地部署CHATRWKV时遇到了AttributeError: 'str' object has no attribute 'requires_grad'