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

Importing my class and using it gives me an error

我正在自学python。现在我尝试编写地址簿。 我读到你应该为它使用 class 但我不明白为什么,因为你可以定义你在这个 class 中的每个函数(比如 insertaddress,deletaddres,......)没有一个并使用它喜欢正常的功能。还是我错了?

但是为了练习 classes,我创建了一个:

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 和 link 将 class 导入我的输入时 class 属性:k.first=input("text") 并尝试执行函数 k.insertadd() 我收到一条错误消息。

NameError: name 'self' is not defined

当我为我的函数提供每个参数作为输入时,我得到一个错误,告诉我 "place" 是一个缺失的参数。

你能帮帮我吗?

你应该做的:

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

那你就可以把k当作对象了...

您的做法不是创建地址簿对象的实例,而是使用 class 对象本身...

当要将一组特定功能封装在一起或要抽象功能时,通常可以使用 class。

假设您的 "address book" 包含一组由各种不同应用程序使用的函数。例如,按"phone book"、"messaging application"等。通过将它们中的每一个分隔为 class,您可以更好地控制代码和相关资源,同时减少冗余。因此,可维护性提高。

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

从 klassen 导入地址簿

k = 地址簿("bar","foo","15 XYZ street",1234444212,"ABC","New York")

k.insertadd()

或者另一种处理方法是在 init 函数中初始化以默认接受 "None" 参数。

例如: class 地址簿():

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 导入地址簿

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

k.insertadd()