Почему я должен называть себя в этом случае? - PullRequest
0 голосов
/ 25 января 2019

Я новичок в ООП, и мне интересно, почему мне нужно предоставить параметр 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)

Ответы [ 2 ]

0 голосов
/ 25 января 2019

Вы должны взглянуть на @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 (который сам по себе является чем-то действительно классным, называемым «декоратором») сделает сам метод полностью вызываемым, не передавая «self».

Надеюсь, это поможет

0 голосов
/ 25 января 2019

Попробуйте вместо этого. Вы создали экземпляр 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()
...