Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 调用具有自映射的类函数_Python - Fatal编程技术网

Python 调用具有自映射的类函数

Python 调用具有自映射的类函数,python,Python,当我试图从另一个类调用一个函数时,我会遇到很多错误 我希望代码从不同的类运行函数,就像我在类中执行self.function时一样,因为我不需要来自其他类的变量 class A(QtWidgets.QMainWindow): def A_a(self): self.A_b() # Bunch of code def A_b(self): self.A_c() # More of code def A_c(se

当我试图从另一个类调用一个函数时,我会遇到很多错误

我希望代码从不同的类运行函数,就像我在类中执行self.function时一样,因为我不需要来自其他类的变量

class A(QtWidgets.QMainWindow):
    def A_a(self):
        self.A_b()
        # Bunch of code
    def A_b(self):
        self.A_c()
        # More of code
    def A_c(self):
        # Even more code

class B(QtWidgets.QMainWindow):
    def B_a(self):
    # Call Class A Function A
     App.A_a(self)
这就产生了错误AttributeError:“B”对象没有属性“A_A”。在我的例子中,还有其他方法可以从其他类调用类函数吗

编辑:

我已经让它使用以下代码:

class A(QtWidgets.QMainWindow):
def A_a(self):
    global SelfVariable
    SelfVariable = self
    self.A_b()
    # Bunch of code
def A_b(self):
    self.A_c()
    # More of code
def A_c(self):
    # Even more code
B类(QtWidgets.QMainWindow): def B_a(自身): #调用类A函数A
App.A_A(自变量)

我想你想要的是

class B(QtWidgets.QMainWindow):
    def B_a(self):
        # Call Class A Function A
        A.A_a(self) # NOTE THIS WILL GIVE YOU AN ERROR SEE BELOW!
但是它会抱怨,因为
A.A\u A
期望一个
A
类型的实例作为它的第一个参数,而不是
B
。。。您可以使
B
成为
a
的子类,以便调用
a
的方法之一。。。但是你可以只做一下self.A_A

class B(A):
    def B_a(self):
        # Call Class A Function A
        self.A_a()
或者,也可能建议您使用mixin来共享代码

class MyMixin:
    def A_c(self):
        #some stuff

class A(QtWidgets.QMainWindow, MyMixin):

    def A_a(self):
        self.A_c()
        # More of code

class B(QtWidgets.QMainWindow, MyMixin):

    def B_a(self):
        self.A_c()
        # More of code
甚至只是一个泛型函数

def A_c(someObject):
   #doWhateverWithSomeObject()

class A(QtWidgets.QMainWindow):

    def A_a(self):
        A_c(self)

class B(QtWidgets.QMainWindow):

    def B_a(self):
        A_c(self)

另一个选择是使A_c成为类A或类B的静态方法或其他任何方法。。。。基本上,底线是无论你想做什么,都有办法去做。。。但是如果没有更多信息,很难说正确的方法是什么

这不是有效的Python,
function
在Python中不是关键字。你是说
def
?欢迎来到StackOverflow。请按照您创建此帐户时的建议,阅读并遵循帮助文档中的发布指南。适用于这里。在您发布MCVE代码并准确描述问题之前,我们无法有效地帮助您。我们应该能够将您发布的代码粘贴到文本文件中,并重现您描述的问题。您发布的代码不会产生您引用的错误。是的,对不起,我的错误。为什么您认为类a的方法可以处理类B中的未定义变量?实例方法只能对该类型的实例调用。再次完成课堂教程(或更多)。首先,您好,谢谢您提供的所有信息,让它正常工作。问题是我使用了第二节课的“self”,我已经用工作代码更新了代码。我也为这个问题感到抱歉,因为我还不熟悉编码,并且尝试着自己去做。