gpt4 book ai didi

python - 为什么类属性不记住通过 __iadd__ 方法添加的值?

转载 作者:太空宇宙 更新时间:2023-11-04 07:27:03 25 4
gpt4 key购买 nike

我有一些短类 Car:

class Car:

def __init__(self, brand, model, color, accesories):
self.brand = brand
self.model = model
self.color = color
self.accesories = ['radio']

def __str__(self):
return " accessories {}".format(self.accesories)

def __iadd__(self, other):
self.accesories.extend(other)
print(self.accesories)
return Car(self.brand, self.model, self.color, self.accesories)

我创建了一个对象:

car1 = Car('opel','astra','blue',[])

当我尝试添加额外的配件时:

car1 += ['wheel']

它打印:

['radio', 'wheel']

但是当我稍后打电话时:

car1.accesories

print(car1)

它分别给我:

['radio']

accessories ['radio']

为什么对象不记得添加到列表中的值?

最佳答案

那是因为你有:

return Car(self.brand, self.model, self.color, self.accesories)

在你的__iadd__方法,它将重置 self.accessories返回['radio']来自 __init__ :

self.accesories = ['radio']

操作:

car1 += ['wheel']

设置从__iadd__返回的值方法作为名称car1accessories__init__ 设置作为['radio']因此你会得到 ['radio']当访问 car1.accessories .


也许您想使用参数值 accessories作为属性:

class Car:

def __init__(self, brand, model, color, accesories=None):
self.brand = brand
self.model = model
self.color = color
self.accesories = accessories if accessories else ['radio']

关于python - 为什么类属性不记住通过 __iadd__ 方法添加的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57227730/

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