📜  在Python中更改类成员

📅  最后修改于: 2020-04-07 10:52:42             🧑  作者: Mango

我们已经看到Python没有static关键字。在类声明中被赋值的所有变量都是类变量
更改类变量的值时应小心。如果尝试使用对象更改类变量,则会为该特定对象创建一个新的实例(或非静态)变量,并且该变量将覆盖类变量。下面是Python程序来演示相同的内容。

# 计算机学生类
class CSStudent:
    stream = 'cse'     # 类变量
    def __init__(self, name, roll):
        self.name = name
        self.roll = roll
# 测试代码,
# 创建类的对象
a = CSStudent("芒果", 1)
b = CSStudent("文档", 2)
print "初始化"
print "a.stream =", a.stream
print "b.stream =", b.stream
# This thing doesn't change class(static) variable 这不会改变类变量,而会创建一个对象变量,并覆盖类变量
# Instead creates instance variable for the object
# 'a' that shadows class member.
a.stream = "ece"
print "\n改变a.stream"
print "a.stream =", a.stream
print "b.stream =", b.stream

输出:

初始化
a.stream = cse
b.stream = cse
改变a.stream
a.stream = ece
b.stream = cse

我们应该只使用类名来更改类变量。

# Program展示如何改变类变量
# 类定义 
class CSStudent:
    stream = 'cse'     # 类变量
    def __init__(self, name, roll):
        self.name = name
        self.roll = roll
# 新对象
a = CSStudent("check", 3)
print "a.tream =", a.stream
# 正确的类,改变你类变量
CSStudent.stream = "mec"
print "\n类变量变成了mec"
# New object for further implementation
b = CSStudent("carter", 4)
print "\n每个对象的stream变量"
print "a.stream =", a.stream
print "b.stream =", b.stream

输出:

a.tream = cse
类变量变成了 mec
每个对象的stream变量
a.stream = mec
b.stream = mec