gpt4 book ai didi

Python 及其引用资料

转载 作者:行者123 更新时间:2023-11-28 19:35:53 24 4
gpt4 key购买 nike

我目前想知道为什么这段普通代码的输出结果出乎我的意料:

class Product(object):
price = 0

def __init__(self, tmp_price):
self.price = tmp_price

class Market(object):
products = []

def __init__(self):
self.products.append(Product(10))

a = Market()
b = Market()

print a.products[0]
print b.products[0]
print len(a.products)

确实,我得到了一些输出:

<__main__.Product object at 0x7fe5899e46d0>
<__main__.Product object at 0x7fe5899e46d0>
2

谁有解释吗?我想这与 python 处理引用的方式有关,但...

最佳答案

问题出在您的这部分代码中:

class Market(object):
products = [] # products belongs to the class and is shared by all instances!
def __init__(self):
self.products.append(Product(10)) # appending to the 'products' class atribute

products 属性属于类并且由所有实例共享。类的所有实例都可以访问类属性。当您从自身 (self.products) 引用产品时,Python 不会找到属于该实例的 products,因此它会查看是否有 products 可以在类中找到。

你真正想要的是:

class Market(object):
def __init__(self):
self.products = [] # products belongs to the instance
self.products.append(Product(10))

另见 Python: Difference between class and instance attributes

关于Python 及其引用资料,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9754970/

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