【问题标题】:defining a method inside a class in python在python的类中定义一个方法
【发布时间】:2011-10-03 07:10:17
【问题描述】:

我正在迈出 Python 编程的第一步,我有一个名为 node 的类,其中包含一个名为 sonsnodes(我认为是合法的)列表。我试图创建一个返回列表长度的函数,但它失败了。这是我的代码:

class node:
    name="temp"
    ID=-1
    abstract="a short description"
    text="the full description"
    sons=[]
    def sLen(none):
        print ("hello")
        return len(self.sons)

这是错误:

NameError:未定义全局名称“self”

如果我尝试删除自我:

NameError:未定义全局名称“self”

显然我误解了什么,但是什么?

【问题讨论】:

    标签: python list methods


    【解决方案1】:
    class node:
        name="temp"
        ID=-1
        abstract="a short description"
        text="the full description"
        sons=[]
        def sLen(self): # here
            print ("hello")
            return len(self.sons)
    
    n = node()
    n.sons = [1, 2, 3]
    print n.sLen()
    

    【讨论】:

    • 请注意,这只是解决了代码中的一个问题。
    • 这段代码的唯一问题是我无法理解它应该做什么。从Python的角度来看,没有问题。查看我的更新,此代码运行良好。
    • @lok​​i2302:您无法理解我的代码的目的的原因是,目前主要是我在玩弄试图弄明白的东西。如果您有兴趣,我可以告诉您,我正在尝试构建一个简单的 RPG 广告系列管理器。
    • @Yotam:嗯,你可能应该考虑使用任何现有的解决方案,而不是从头开始实施所有这些东西。如果您正在编写 RPG,请专注于 RPG 而不是节点。除非“节点”是一个字符;-)
    【解决方案2】:

    类方法的第一个参数始终是对“self”的引用。

    您可能也会在这里找到有趣的答案:What is the purpose of self?

    引用最重要的一点:

    Python 决定以一种使实例变为 该方法属于自动传递,但未收到 自动:方法的第一个参数是实例 方法被调用。

    如果您想更深入地讨论python中的类定义,当然可以从官方文档开始:http://docs.python.org/tutorial/classes.html

    【讨论】:

      【解决方案3】:

      您调用了none 方法的第一个参数,而不是self

      return len(none.sons)
      

      【讨论】:

      • 第一个参数总是 self 类,我可以给它起任何我喜欢的名字吗?
      • 不过,您确实应该将其命名为 self,这样以后可能会阅读代码的其他人不会感到惊讶。
      猜你喜欢
      • 1970-01-01
      • 2012-03-16
      • 1970-01-01
      • 1970-01-01
      • 2012-01-02
      • 2012-04-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多