为什么在这种情况下我需要调用 'self'?

Why do I need to call 'self' in this case?

我是 OOP 的新手,我想知道为什么我需要在最后一行提供参数 MainWindow。如果我自己调用 outside_func,我不需要参数,但是当我在 class 中调用它时,我需要提供 class 名称才能工作。例如,MainWindow.class_func2() 会抛出错误

class MainWindow():
    def __init__(self):
        print("in init")

    def claas_func(self):
        print ("func1")

    def class_func2(self):
        outside_func()

def outside_func():
    print('outside called')


instance = MainWindow()
MainWindow.class_func2(MainWindow)

试试这个。您已经创建了 MainWindow() 的一个实例。现在您可以使用它访问其成员。

class MainWindow():
    def __init__(self):
        print("in init")

    def claas_func(self):
        print ("func1")

    def class_func2(self):
        outside_func()

def outside_func():
    print('outside called')


instance = MainWindow()
instance.class_func2()

还有 运行 这个,注意它初始化 MainWindow() class 2x。我不推荐第二种方法。这是多余的,也是不恰当的。但是这样你就可以看到它在做什么。

class MainWindow():
    def __init__(self):
        print("in init")

    def claas_func(self):
        print ("func1")

    def class_func2(self):
        outside_func()

def outside_func():
    print('outside called')


instance = MainWindow()
MainWindow().class_func2()

你应该看看@staticmethod

class MainWindow():
    def __init__(self):
        print("in init")

    def claas_func(self):
       print ("func1")

    @staticmethod
    def class_func2():
        return outside_func()

def outside_func():
    print('outside called')

instance = MainWindow()
>> in init

instance.class_func2()
>> outside called 

这个@staticmethod(它本身就是一个很酷的东西,叫做'decorator')将使方法本身完全可以调用而无需传递'self'。

希望对你有帮助