Проблемы с методом объявления (& self) в python - PullRequest
0 голосов
/ 26 февраля 2019

Пытаясь поэкспериментировать с классами и методами, а также с тем, как передавать переменные между ними, я написал несколько сценариев, чтобы попытаться понять механику.При этом я столкнулся с проблемой, когда одна из моих функций не определена:

NameError: name 'exclaim' is not defined

Я думал, что использование self может разрешиться, но я просто возвращаюсь к

NameError: name 'self' is not defined

Я сталкивался с несколькими источниками, которые заставили меня взглянуть на уровни отступов методов и вызывать через HelloWorld.exclaim (), что привело к той же проблеме.

пожалуйста, посмотрите мой код: (script1)

import datasource

class HelloWorld:

    def exclaim():
        number1 = input("enter a number")
        datasource.Class2.method3.impvariable1 = number1

    def main():
        HelloWorld.exclaim()
        print(datasource.Class1.method1.variable1)
        print(datasource.Class2.method2.variable2)
        print(datasource.Class2.method3.variable3)

    if __name__ == '__main__':
        main()

Script2:

#datasource.py
class Class1:
    def method1():
        variable1 = "Hello "

class Class2:
    def method2():
        variable2 = "World"
    def method3():
        impvariable1 = 0
        variable3 = "!"
        for x in range(impvariable1):
            variable3 = variable3 + "!"

Я также пытался (количество сотен других итераций)

    #datahandler.py
import datasource

class HelloWorld:

    def exclaim(self):
        number1 = input("enter a number")
        datasource.Class2.method3.impvariable1 = number1

def main(self):
    HelloWorld.exclaim(self)
    print(datasource.Class1.method1.variable1)
    print(datasource.Class2.method2.variable2)
    print(datasource.Class2.method3.variable3)

if __name__ == '__main__':
    main(self)

, который производит;

NameError: name 'self' is not defined

1 Ответ

0 голосов
/ 26 февраля 2019
import datasource

class HelloWorld:

    def exclaim(self):
        number1 = input("enter a number")
        datasource.Class2.method3.impvariable1 = number1

def main():
    obj = HelloWorld()
    obj.exclaim()
    print(datasource.Class1.method1.variable1)
    print(datasource.Class2.method2.variable2)
    print(datasource.Class2.method3.variable3)

if __name__ == '__main__':
    main()
...