【问题标题】:Issues with declaration method ( & self) in pythonpython中声明方法(&self)的问题
【发布时间】:2019-02-26 11:40:32
【问题描述】:

在尝试使用类和方法以及如何在它们之间传递变量时,我编写了几个脚本来尝试理解其中的机制。 在这样做时,我遇到了一个问题,即我的一个函数未定义:

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()

脚本2:

#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 + "!"

我也尝试过(100 次其他迭代)

    #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

【问题讨论】:

  • 实例方法应该明确地将self 作为它们的第一个参数。您的 main 定义不应在类中。你的 if __name__ 块不应该在一个类中。我什至不确定你的课应该是做什么的。
  • 查看此链接以获得有关 python OOP 的良好指南:realpython.com/python3-object-oriented-programming
  • 就目前而言,我没有遇到与您相同的错误。你能分享给出这个错误的确切代码吗?或者更清楚你想要做什么?您是否尝试从另一个类设置实例变量(手头没有实例)?
  • 如果条件和方法 main(0) 需要在 HelloWorld 类之外编写,并且类中的每个方法都需要一个 self 作为第一个对象,如 def exclaim(self):
  • 从字面上遵循每一条指导方针,非常明确和直接地表达了我的需要。提供必要的最短代码,并因为代码不清楚而感到悲痛和否决:/我是新手新手,这就是问题所在,这个论坛足以吓跑人们编码,幸运的是 Rahil 很有耐心和善良客观地看待问题是什么,大家可以向他学习,让编程社区变得更好,更容易访问!

标签: python python-3.x class methods self


【解决方案1】:
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()

【讨论】:

  • 这就是解决方案!!非常感谢你,鉴于我从需要更多信息的人那里得到了殴打,我不敢相信你这么快就做到了 - 非常感谢!
猜你喜欢
  • 1970-01-01
  • 2010-11-17
  • 1970-01-01
  • 1970-01-01
  • 2012-09-04
  • 2012-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多