gpt4 book ai didi

python - 请帮助我理解 python 类与实例变量

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

我是 Python 的新手,在理解 Python 如何解释类​​和实例变量时遇到了一些困难。我的背景是 C#,所以我对 OOP 有相当好的理解(从 C# 的心态),但是我只是对 python 有点困惑。我猜这是因为我的思维方式不对。

以下面的类为例:

class User():
"""The default user implementation"""

# define the variables
id = None
first_name = None
last_name = None
email = None
password = None
created = None
deleted = False

def __init__(self):
"""Creates a new instance of the User object."""
self.is_admin = False

根据我阅读的文档,所有的 id、first_name、last_name 等都是实例之间共享的类属性。在 C# 思维模式中,这些将是静态。那么is_admin就是一个实例属性,它仅限于对象的特定实例。这些将是 C# 中的字段属性

然而,当我做这样的事情时,我的困惑就来了:

    new_user = User()    new_user.id = "blah"    new_user.last_name = "lasty"    new_user1 = User()    new_user1.id = "some_id"    new_user1.last_name = "firsty"

这会将值设置为:

    new_user.id = "blah"    new_user.last_name = "lasty"    new_user1.id = "some_id"    new_user1.last_name = "firsty"

假设 idlast_name 被定义为类属性,我会假设对 new_user1 对象的调用会被覆盖“blah”和“lasty”值,但是每个实例都保留了为其定义的值。因此,我的困惑。

如果这是正常的,有人可以解释一下这是为什么吗?另外,在那种情况下,如何定义一个静态变量?

干杯,贾斯汀

最佳答案

Python 查找实例的属性,然后是实例的类,然后是任何基类及其父类。所以idlast_name是实例属性,隐藏了类上的同名属性。如果您访问一个您没有在实例上设置的属性(例如 first_name),那么您将获得该类的属性,因为它在实例上找不到。

关于python - 请帮助我理解 python 类与实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22214607/

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