我是 Python 新手,正在努力学习课程。这是我的代码。
class sgrid(filename):
def __init__(filename):
filename = self.filename # do I need these?
print_to_app2 = self.print_to_app2 # do I need these?
def print_to_app2(text):
print(text)
def iterate(filename):
self.print_to_app2(filename)
self.print_to_app2('Application is initializing')
if __name__ == '__main__':
sgrid=sgrid()
filename = "a_file_name"
sgrid.iterate(filename)
我收到此错误:NameError: NameError: name 'filename' is not defined
我做错了什么?我希望能够在这个类内部和外部调用函数。
答案 0 :(得分:0)
你可能想要这个:
class sgrid(object):
def __init__(self,filename):
self.filename = filename # do I need these?
def print_to_app2(self,text):
print(text)
def iterate(self):
self.print_to_app2(self.filename)
self.print_to_app2('Application is initializing')
if __name__ == '__main__':
filename = "a_file_name"
sgrid=sgrid(filename)
sgrid.iterate()
答案 1 :(得分:0)
就像 filename
是你的类 sgrid
的超类。
但是没有名为 filename
的类,因此找不到它。
并且您必须将 self 引用传递给您的所有方法。
我不太确定你想做什么,但如果你想创建一个带有文件名和 print_to_app2
文件名的 sgrid,你可以像这样尝试:
class sgrid:
def __init__(self, filename):
self.filename = filename
def print_to_app2(self, text):
print(text)
def iterate(self):
self.print_to_app2(self.filename)
self.print_to_app2('Application is initializing')
if __name__ == '__main__':
filename = "a_file_name"
sgridInstance=sgrid(filename)
sgridInstance.iterate()
答案 2 :(得分:0)
这个脚本中有很多错误的地方:) 但这里描述的主要内容在第一行。
class sgrid(filename):
这是您定义类的地方,您将作为第一个参数 filename
传递,程序不知道该参数。你应该把它留空。
还有其他错误。
class sgrid():
# I fixed the declaration above.
def __init__(self, filename):
self.filename = filename
def iterate(self, filename=None):
if filename is None:
filename = self.filename
print("App is initializing")
print(filename)
if __name__ == '__main__':
sgrid=sgrid() # this will produce an error, i leave that up to you
# PS : are you sure you want to name this variable "sgrid" ? :)
filename = "a_file_name"
sgrid.iterate(filename)
当您调用 class
时,您的方法的第一个位置参数默认传递给函数。并且需要在声明函数的时候注明,这个变量的名字是self
。这是一个变量,用于保存您可以在类中的方法之间共享的值。
我还修复了其他一些错误。我邀请你阅读代码,提出问题,也许看看文档。 :)
答案 3 :(得分:0)
class sgrid:
def __init__(self , filename):
filename = self.filename
def print_to_app2(text):
print(text)
def iterate(filename):
self.print_to_app2(filename)
self.print_to_app2('Application is initializing')
if __name__ == '__main__':
sgrid=sgrid()
filename = "a_file_name"
sgrid.iterate(filename)