导入我的课程并使用它给了我一个错误

问题描述:

我正在学习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 

当我给我的函数每个参数我有一个输入我得到一个错误,告诉我“地点”是一个缺失的参数。

你能帮我吗?

+1

欢迎*的。请阅读并遵守帮助文档中的发布准则。 [最小,完整,可验证的示例](http://*.com/help/mcve)适用于此处。在发布您的MCVE代码并准确描述问题之前,我们无法为您提供有效的帮助。 我们应该能够将发布的代码粘贴到文本文件中,并重现您描述的问题。 – Prune

+2

您似乎对课程的工作方式存在误解。它看起来像你试图直接使用类对象来保存你的数据。不要这样做。您需要创建一个或多个类的实例。暂时忘记导入地址簿类。尝试首先在单个脚本文件中使用它。一旦完成所有工作,您可能希望将其分成多个文件,但可能不需要这么做,Python不是Java。 –

+0

我的朋友使用C++代码,他告诉我可以通过为类和函数创建额外的文件来构建我的代码。这样我的主将会更好地阅读。 你的意思是没有多个文件的小项目或一般'? – Omikron

你应该这样做:

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()