簡體   English   中英

從 main 中的類調用函數

[英]Calling a function from a class in main

我似乎犯了一個我找不到的愚蠢錯誤。 盡管查看了示例代碼並嘗試模擬語法,但我只是嘗試從我的記錄類中調用我的函數並且出現無效的語法錯誤。

我試過遵循教程並以各種方式調用函數,所以問題可能不在於函數的調用,而是我的其他感覺。

類定義

class record:

    def __init__(self,telephone,lastname,firstname):
        self.telephone = telephone
        self.lastname = lastname
        self.firstname = firstname

    def addrecord(self,x,y,z):
        x = input('Enter telephone number')
        y = input('Enter lastname')
        z = input('Enter firstname')
        phonebook.append(record(x,y,z))
        return

    def deleterecord(self,x):
        phonebook[x-1].pop
        return

主要的

phonebook = record[]
addrecord(515,'fin','matt')
print(phonebook[0].firstname)
deleterecord(1)
print(phonebook[0].firstname)

如果所有這些都有效,我希望輸出為“matt”“null”

您的代碼存在許多問題:

  • 你在課堂之外定義電話簿
  • deleterecord您應該調用phonebook.pop(x)
  • 應該有兩個類來處理電話簿和記錄,並且可以使用namedtuple對記錄進行建模。
  • 存在語法錯誤,例如調用record[]是無效的 Python。

替代實現:

from collections import namedtuple

PhoneRecord = namedtuple("PhoneRecord", ['firstname', 'lastname', 'telephone'])

class PhoneBook:

    def __init__(self):
        self._phonebook = []

    def addrecord(self, record):
        self._phonebook.append(record)
        return self._phonebook.index(record)

    def deleterecord(self, i):
        self._phonebook.pop(i)

phonebook = PhoneBook()
record_index = phonebook.addrecord(PhoneRecord(firstname="matt", lastname="snow", telephone="25512521"))
print(phonebook._phonebook)
phonebook.deleterecord(record_index)
print(phonebook._phonebook)

這將在控制台中產生:

[PhoneRecord(firstname='matt', lastname='snow', telephone='25512521')]
[]

您的問題的簡化版本是,給定代碼

records = []
records.append("matt")
print(records[0])
del records[0]
print(records[0])

為什么我沒有得到以下輸出

"matt"
None

相反,您會收到IndexError異常。

原因是您正在訪問超出列表大小的元素,Python 通過引發異常而不是返回 None 來處理此問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM