繁体   English   中英

为什么在这种情况下我需要称呼“自我”?

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

我是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)

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

这个@static方法(本身就是一个很酷的称为“ decorator”的东西)将使方法本身完全可调用而无需传递“ self”。

希望能帮助到你

试试这个吧。 您已经创建了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()类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()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM