导入我的课程并使用它给了我一个错误
我正在学习python。现在我尝试编写一个地址簿。 我读过,你应该使用它的一个类,我不明白为什么,因为你可以定义这个类中的每个函数(如insertaddress,deletaddres,...)没有一个,并像普通函数一样使用它。还是我错了?导入我的课程并使用它给了我一个错误
但要获得一些练习带班,我创建一个:
class Addressbook():
def __init__(self,last,first,street,num,plz,place):
self.last=last
self.first=first
self.street=street
self.num=num
self.plz=plz
self.place=place
def insertadd(self):
text =self.last+" "+self.first+" "+self.street+"
"+self.num+" "+self.plz+" "+self.place+"\n"
with open("addressbook.txt", "a") as file:
file.write(text)
在我的主要文件:
from klassen import Addressbook
k.last= input()
k.first=input()
(...)
k.place = input()
k.insertadd()
但是当我通过from klassen import Addressbook as k
导入我的阶级和链接类属性我输入:k.first=input("text")
并尝试执行功能k.insertadd()
我收到一条错误消息。
NameError: name 'self' is not defined
当我给我的函数每个参数我有一个输入我得到一个错误,告诉我“地点”是一个缺失的参数。
你能帮我吗?
你应该这样做:
from klassen import Addressbook
k = Addressbook("","","","","","") # Init it with the variables you want!
然后你可以使用k作为一个对象...
你在做的样子,你没有创建一个地址簿对象的实例,您正在使用类对象本身...
当某些功能集合封装在一起或功能被抽象时,通常会使用一个类。
想象一下,您的“地址簿”包含一系列由各种不同应用程序使用的功能。例如,通过“电话簿”,“消息应用程序”等。通过将它们中的每一个分隔为一个类,您可以更好地控制代码和相关资源,同时减少冗余。因此,可维护性提高。
对于您的代码,您必须初始化所有变量。或者至少将它们传递给您的init函数。
从克拉森导入通讯录
K =通讯录( “酒吧”, “富”, “15街XYZ”,1234444212, “ABC”, “纽约”)
k.insertadd()
或者处理它的另一种方式是在init函数中初始化以接受“无”参数作为默认值。
如: 类通讯录():
def __init__(self,last,first,street = None,num,plz = None,place = None):
self.last=last
self.first=first
self.street=street
self.num=num
self.plz=plz
self.place=place
现在的对象不需要所有的参数。
从克拉森进口通讯录
K =通讯录(最后= “栏”,第一= “foo” 的,NUM = 1234444212)
k.insertadd()
欢迎StackOverflow的。请阅读并遵守帮助文档中的发布准则。 [最小,完整,可验证的示例](http://stackoverflow.com/help/mcve)适用于此处。在发布您的MCVE代码并准确描述问题之前,我们无法为您提供有效的帮助。 我们应该能够将发布的代码粘贴到文本文件中,并重现您描述的问题。 – Prune
您似乎对课程的工作方式存在误解。它看起来像你试图直接使用类对象来保存你的数据。不要这样做。您需要创建一个或多个类的实例。暂时忘记导入地址簿类。尝试首先在单个脚本文件中使用它。一旦完成所有工作,您可能希望将其分成多个文件,但可能不需要这么做,Python不是Java。 –
我的朋友使用C++代码,他告诉我可以通过为类和函数创建额外的文件来构建我的代码。这样我的主将会更好地阅读。 你的意思是没有多个文件的小项目或一般'? – Omikron