Python:如何从一个类到另一个类的非初始化属性

2024-09-30 04:38:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我想把一个变量从一个类发送到另一个类。问题是我不能使用init构造函数,因为我的变量在开始时没有定义。如果用户按下一个按钮,它将调用一个函数(在第一个类中),变量将得到在该函数中计算的值。我需要在另一个类中得到那个变量,但我做不到

class Fenetre_P(QtWidgets.QMainWindow):
    def __init__(self):
        super(Fenetre_P, self).__init__()
        self.initUI()

    def initUI(self):
        self.chk_dark = QtWidgets.QCheckBox("Theme sombre", self)      
        self.chk_dark.stateChanged.connect(lambda: self.SetBarValues())
    def SetBarValues(self):
        amax = 50

class Fenetre_M(QtWidgets.QDialog):
    def __init__(self):
        super(Fenetre_M, self).__init__()
        self.initUI()

    def initUI(self):
        ...
        def test(self):
            print(amax)

未定义amax


Tags: 函数用户self定义initdefclassdark
2条回答

这应该会有所帮助,尽管您可以使用其他OOP概念(如组合)来完成工作

class Fenetre_P(QtWidgets.QMainWindow):
    amax=0
    def __init__(self):
        super(Fenetre_P, self).__init__()
        self.initUI()

    def initUI(self):
        self.chk_dark = QtWidgets.QCheckBox("Theme sombre", self)      
        self.chk_dark.stateChanged.connect(lambda: self.SetBarValues())
    def SetBarValues(self):
        self.amax = 50

class Fenetre_M(QtWidgets.QDialog):
    def __init__(self,amax):
        super(Fenetre_M, self).__init__()
        self.amax=amax
        self.initUI()

    def initUI(self):
        ...
        def test(self):
            print(self.amax)

实例变量在赋值时就存在了。它们不必仅在init方法中定义。看起来您需要的是使amax成为一个实例变量,并将Fenetre_P的实例传递给Fenetre_M

>>> class A:
...    def __init__(self):
...       self.a = 3
...    def some(self):
...       self.b = 9
...
>>> ainstance = A()
>>> dir(ainstance)
['__doc__', '__init__', '__module__', 'a', 'some']
>>> ainstance.a
3
>>> ainstance.some()
>>> dir(ainstance)
['__doc__', '__init__', '__module__', 'a', 'b', 'some']
>>> ainstance.b
9

相关问题 更多 >

    热门问题