【发布时间】:2019-09-26 09:28:03
【问题描述】:
我正在尝试学习 python OOP,但遇到以下错误。
Exception has occurred: NameError
name 'self' is not defined
File "/home/khalid/Desktop/MiniProject3/test1.py", line 27, in <module>
login = first_class (self.Bank_Users.keys(), self.Bank_Users.values())
File "/home/khalid/anaconda3/lib/python3.7/runpy.py", line 85, in _run_code
exec(code, run_globals)
File "/home/khalid/anaconda3/lib/python3.7/runpy.py", line 96, in _run_module_code
mod_name, mod_spec, pkg_name, script_name)
File "/home/khalid/anaconda3/lib/python3.7/runpy.py", line 263, in run_path
pkg_name=pkg_name, script_name=fname)
我已尝试搜索可能已解决的类似问题,但找不到解决此错误的方法。
class first_class(object):
def __init__(self, UserName, Password, Bank_Users):
self.UserName = UserName
self.Password = Password
self.Bank_Users = {"Aldo": "1234"}
def login_or_exit(self):
while True:
print("Please Enter User Name")
self.UserName = input(">> ")
print("Please Enter Password")
self.Password = input(">> ")
if self.UserName in self.Bank_Users.keys() and self.Password in self.Bank_Users.values():
print("Logging into", self.UserName)
else:
print("Unsuccesful!!")
login = first_class (self.Bank_Users.keys(), self.Bank_Users.values())
login.login_or_exit()
【问题讨论】:
-
您只能在定义的上下文中使用
self。在__init__和login_or_exist函数中定义了self,但不在运行first_class(self.Bank_Users.keys(), ...)的顶层。self在定义为参数或以其他方式绑定的特定上下文之外没有任何意义;我们无法告诉您如何修复它,除非我们知道您打算它是什么意思,并显示原本可以正常工作的代码。 -
在您的
__init__()中硬编码Bank_Users有什么意义,同时还采用该名称的参数(但随后忽略它)? -
顺便说一句,在 Python 中,将 类 命名为
CamelCase并将成员命名为lower_case是一种很好的形式。请参阅python.org/dev/peps/pep-0008的样式指南 -
你在课堂之外,在范围之外。
标签: python python-3.x oop self