我是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)
答案 0 :(得分:2)
您应该看一下@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”。
希望有帮助
答案 1 :(得分:1)
试试看。您已经创建了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()