【问题标题】:builtins.NameError: name 'self' is not definedbuiltins.NameError:名称“自我”未定义
【发布时间】:2014-10-10 11:56:11
【问题描述】:

在 Windows 7 上使用 Python 3。

import pickle
import os.path
from tkinter import * # Import tkinter
import tkinter.messagebox   

class Places:
  def __init__(self, name, street, city, state, zip):
    self.name = name
    self.street = street
    self.city = city
    self.state = state
    self.zip = zip

class PlacesBook:
  def __init__(self):      
    window = Tk() # Create a window
    window.title("PlacesBook") # Set title

我收到错误 builtins.NameError: name 'self' is not defined at "class PlacesBook:"

【问题讨论】:

  • 你能检查一下你的缩进吗?这在 Python 中很重要。
  • 我的复制和粘贴中没有显示缩进。
  • 无法复制 - 运行更新的代码 (pb = PlacesBook()) 对我来说很好。您能否提供一个minimal example 以允许其他人重现该问题?
  • 这可能会回答你的问题:stackoverflow.com/questions/1802971/…

标签: python python-3.x


【解决方案1】:

问题在于你的缩进,在 Python 中,缩进非常重要,这就是你如何定义代码的哪一部分在类、方法中......

另外一点,如果你使用 python 3,你的所有类都必须继承自对象。

import pickle
import os.path
from tkinter import * # Import tkinter
import tkinter.messagebox

class Places(object):
    def __init__(self, name, street, city, state, zip):
        self.name = name
        self.street = street
        self.city = city
        self.state = state
        self.zip = zip

class PlacesBook(object):
    def __init__(self):
        window = Tk() # Create a window
        window.title("PlacesBook") # Set title

【讨论】:

  • 复制和粘贴时没有显示缩进。还有你所说的(对象)是什么意思
  • 你倒退了;在 3.x 中所有类都是“新式”的,您只需要在 2.x 中显式指定object 继承即可。
  • 我更改了:类 Stock(self, name, tankLocation, quantity, price, category, description, search): 现在它说 name'self' 没有定义
  • @Ben 到class 的“参数”是要继承的基类(在MoiTux 的示例中为object,使其成为"new-style" class); __init__ 是定义要在初始化时传递的参数的正确位置。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-25
  • 2010-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多