导入我的类并使用它会给我一个错误

时间:2017-06-01 16:48:47

标签: python class addressbook

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

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

你能帮我吗?

2 个答案:

答案 0 :(得分:0)

你应该这样做:

from klassen import Addressbook
k = Addressbook("","","","","","") # Init it with the variables you want!

然后你可以用k作为对象......

你正在做的事情,你没有创建一个Addressbook对象的实例,你正在使用类对象本身......

答案 1 :(得分:0)

当一组函数要封装在一起或者要抽象出功能时,通常会接受使用类。

想象一下,您的“地址簿”包含各种不同应用程序使用的一组函数。例如,通过“电话簿”,“消息传递应用程序”等。通过将每个类作为一个类进行隔离,您可以更好地控制代码和相关资源,同时减少冗余。因此,可维护性提高。

对于您的代码,您必须初始化所有变量。或者至少将它们传递给 init 函数。

来自klassen import Addressbook

k =地址簿(“bar”,“foo”,“15 XYZ street”,1234444212,“ABC”,“纽约”)

k.insertadd()

或者另一种处理方式是在 init 函数中初始化以接受“None”参数作为默认值。

例如: class Addressbook():

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

现在该对象不需要所有参数。

来自klassen import Addressbook

k =地址簿(last =“bar”,first =“foo”,num = 1234444212)

k.insertadd()