【发布时间】:2020-03-12 07:02:13
【问题描述】:
假设我有以下课程
class Parent:
message = "Hello World"
@classmethod
def print_message(cls):
print(cls.message)
@classmethod
def change_message(cls, new_message):
cls.message = new_message
class Child_one(Parent):
@classmethod
def print_messsage(cls):
print (cls.message)
@classmethod
def change_message(cls, new_message):
cls.message = new_message
class Child_two(Parent):
@classmethod
def print_message(cls):
print(cls.message)
我想我的问题是子类的cls 指的是什么,因为如果我更改父类中的静态变量message,它会正确更改两个子类中message 的值
Parent.change_message("This is new message")
Child_one.print_message() # This is new message
Child_two.print_message() # This is new message
这是我的预期行为,cls.message 均指父类的消息。但是这样做
Child_one.change_message("I am child one")
导致
等行为Parent.print_message() # This is new message
Child_one.print_message() # I am child one
Child_two.print_message() # This is new message
所以 Child_one 的cls.message 变量不再指向父类的消息。
在其他语言中,例如c++ 或c#,静态更改父类或子类的静态变量会导致所有父类和派生类发生更改。有没有办法在python 中复制这种行为,如果没有,为什么不呢?
【问题讨论】:
标签: python inheritance class-method static-variables