为什么在这种情况下我需要调用 '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'。
希望对你有帮助
我是 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'。
希望对你有帮助