我是一位Python的新手,对于Python如何解释类和实例变量还有些困惑。我的背景是C#,因此我对面向对象编程(从C#角度)有相当不错的理解,然而我在Python上还是有些疑惑。我猜测这是因为我用了错误的思维方式。
以下是一个类的示例:
从我读到的文档来看,所有的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"
鉴于id和last_name被定义为类属性,我原本认为对new_user1对象的调用会覆盖"blah"和"lasty"的值,但是每个实例都保留了分���给它的值。因此,我有点疑惑。
如果这是正常的,请问有人能说明一下原因吗?那么在这种情况下,如何定义静态变量呢?
谢谢, Justin
以下是一个类的示例:
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"
鉴于id和last_name被定义为类属性,我原本认为对new_user1对象的调用会覆盖"blah"和"lasty"的值,但是每个实例都保留了分���给它的值。因此,我有点疑惑。
如果这是正常的,请问有人能说明一下原因吗?那么在这种情况下,如何定义静态变量呢?
谢谢, Justin