gpt4 book ai didi

Python 实例变量显然共享数据

转载 作者:行者123 更新时间:2023-11-28 21:56:00 25 4
gpt4 key购买 nike

<分区>

因此,当我创建一个类似于下面的类时,我得到了意想不到的行为,它看起来好像饮料类的实例正在共享“stock”变量,但由于 stock 变量是在 init 中声明的声明,我觉得应该限制在一个实例上。

class Beverage():

def __init__(self, owner, beverages=[]):
self.stock = beverages
self.owner = owner

def add_drink(self, beverage):
self.stock.append(beverage)

def get_drink(self, beverage):
if beverage in self.stock:
print "(%s) Has beverage (%s)!" %(self.owner,beverage)
self.stock.remove(beverage)
else:
print "(%s) Does not have beverage (%s)!" %(self.owner,beverage)

her = Beverage("her",["milkshake"])
me = Beverage("I")
you = Beverage("You")
you.add_drink("milkshake")
you.add_drink("punch")
her.get_drink("milkshake")
me.get_drink("milkshake")
me.add_drink("tea")
you.get_drink("milkshake")

输出

(her) Has beverage (milkshake)!
(I) Has beverage (milkshake)!
(You) Does not have beverage (milkshake)!

输出在我看来应该是:

(her) Has beverage (milkshake)!
(I) Does not have beverage (milkshake)!
(You) has beverage (milkshake)!

由于“你”和“她”将饮料“奶昔”添加到他们的库存中,但“我”能够以某种方式访问​​它,就好像它是一个共享变量一样。在 StackOverflow 上搜索类似的帖子时,我发现了一堆类似的帖子,其中编码人员在类级别定义了变量,因此共享它们是有道理的,但这里的 stock 变量是在实例级别声明的,所以我假设 Python 会将其视为特定于实例的。对代码为何如此行为的任何解释?

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