python - 被继承的类能看到父类上值的变化吗?
问题描述
我有两节课。A 类有一个公共变量X,两个类都使用它, A 类每 3 秒更改一次X的值,而B 类打印X的新值。但是B 类只看到初始值10。我需要class B来查看Class A中变量X的变化。
import threading
import time
class A():
X = 10
def __init__(self):
self.first()
def first(self):
while True:
self.X = self.X + 3
print("A",self.X)
time.sleep(3)
class B(A):
def __init__(self):
t = threading.Thread(target= self.second, args=())
t.setDaemon(True)
t.start()
def second(self):
while True:
print(self.X)
time.sleep(3)
example1 = B()
example2 = A()
解决方案
这不是设置类变量X
。
self.X = self.X + 3
在第一次迭代self.X
中读取类变量,因为没有实例变量X
。
但是,它分配实例变量,从那时起,self.X
innerA
是一个实例变量,所做的任何更改都不会反映在A.X
.
您可以通过使方法 ( ) 的第一个参数引用类而不是带有装饰器self
的实例来解决此问题。@classmethod
@classmethod
def first(cls):
while True:
cls.X = cls.X + 3
print("A",cls.X)
time.sleep(3)
完整代码:
import threading
import time
class A():
X = 10
def __init__(self):
self.first()
@classmethod
def first(cls):
while True:
cls.X = cls.X + 3
print("A",cls.X)
time.sleep(3)
class B(A):
def __init__(self):
t = threading.Thread(target= self.second, args=())
t.setDaemon(True)
t.start()
def second(self):
while True:
print(self.X)
time.sleep(3)
example1 = B()
example2 = A()
推荐阅读
- python - 用一个简单的语句制作两个条件/循环语句在一条 python 行中工作
- makefile - 试图理解为什么 make 失败
- mysql - 通过 vsts 调用表达式返回以代码“1”退出
- amazon-web-services - 将云端请求重定向到新 URL
- angular - PrimeNg 饼图 - 默认显示所有工具提示?
- android - 在 Room 中链 2 @Query 命令
- javascript - 当我单击按钮时,我不知道出了什么问题
- javascript - 我正在实施一个项目,我必须接受所有 url 请求
- php - 数据表中的总和是多少?PHP
- zooming - Mapbox:如何从 Mapbox 获取缩放级别的比例?