首页 > 解决方案 > 为什么在这种情况下我需要调用“自我”?

问题描述

我是 OOP 的新手,我想知道为什么我需要将参数 MainWindow 提供给最后一行。如果我自己调用 outside_func,我不需要参数,但是当我在类中调用它时,我需要提供类名以使其工作。例如,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)

标签: pythonoopself

解决方案


你应该看看@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'。

希望能帮助到你


推荐阅读