[英]Attribute Error Person and customer classes
編寫一個名為Person的類,該類具有用於數據顯示其姓名,地址,電話和電子郵件的屬性。 接下來,編寫一個名為Customer的類,它是Person類的子類。 Customer類應具有一個客戶編號的數據屬性和一個布爾數據屬性,該屬性指示客戶是否希望成為郵件列表中的一個。 在一個簡單程序中演示Customer類的實例。
我收到了裝箱錯誤。
, line 6, in main
'555-987-1549','adsf@asd.com','Y','1153')
TypeError: __init__() takes 5 positional arguments but 7 were given
我沒有完全遵循使用布爾表達式的要點,因此也許有人可以解釋為什么要使用它,並幫助我理解為什么會出現該錯誤。
這是我的代碼
班級Person
:
class Person:
def __init__(self, name, address, telephone, email):
self.__name = name
self.__address = address
self.__telephone = telephone
self.__email = email
def set_name(self, name):
self.__name = name
def set_address(self, address):
self.__address = address
def set_telephone(self, telephone):
self.__telephone = telephone
def set_email(self, email):
self.__email = email
def get_name(self):
return self.__name
def get_address(self):
return self.__address
def get_telephone(self):
return self.__telephone
def get_email(self):
return self.__email
類Customer
:
import Person
class Customer(Person.Person):
def __init__(self, name, address, telephone, email):
Person.Person.__init__(self, mail, number)
self.mailing = 'Y'== True
self.__mail = mail
self.__number = number
def set_mail(self, mail):
self.__mail = mail
def set_number(self, number):
self.__number = number
def get_mail(self):
return self.__mail
def get_number(self):
return self.__number
def mailList(self, mail):
if mailing == True:
return"On the mailing list"
else:
return"Not on the mailing list"
def __str__(self):
return "\nName: {}\nAddress: {}\ntelephone: {}\nEmail: {}\nMail: {}\nNumber: {}".\
format(self.get_name(), self.get_address(),\
self.get_telephone(), self.get_email()\
, self.mailList(self.get_mail()),self.get_number())
customerTest
:
import Customer
def main():
customer = Customer.Customer('Josh', 'Long st, Dallas TX',\
'555-987-1549','adsf@asd.com','Y','1153')
print(customer)
main()
看起來像而不是
def __init__(self, name, address, telephone, email):
您實際上的意思是:
def __init__(self, name, address, telephone, email, mail, number):
順便問一下,這是怎么回事?
self.mailing = 'Y'== True
你可能是說
self.mailing = mail == True
編輯:是的,托比亞斯說了什么。 請同時解決此問題,包括缺少參數-
Person.Person.__init__(self, mail, number)
另外,雖然沒有必要,但您可能想使用super().(...)
語法,而不是直接調用Person.__init__(self, ...)
。
客戶中的__init__
構造函數不正確,參數數量不正確。
在self.mailing
您可能希望基於參數為True
或False
。
def __init__(self, name, address, telephone, mail, mailing, number):
Person.Person.__init__(self, name, address, telephone, mail)
self.mailing = True if mailing == 'Y' else False
self.__mail = mail
self.__number = number
另外mailList
需要使用self來引用當前對象。
def mailList(self, mail):
if self.mailing == True:
return"On the mailing list"
else:
return"Not on the mailing list"
對於Person類,如果您使用的是Python2.7,請將其定義為從Object
類繼承,以便稍后在您從此類繼承時可以正確使用super
表達式,否則,如果您使用Python3 +,則可以說super().__init__()
,因此:
人員類別將是:
class Person(object):#only change
def __init__(self, name, address, telephone, email):
self.__name = name
self.__address = address
self.__telephone = telephone
self.__email = email
def set_name(self, name):
self.__name = name
def set_address(self, address):
self.__address = address
def set_telephone(self, telephone):
self.__telephone = telephone
def set_email(self, email):
self.__email = email
def get_name(self):
return self.__name
def get_address(self):
return self.__address
def get_telephone(self):
return self.__telephone
def get_email(self):
return self.__email
至於客戶類別,請閱讀我所做更改的代碼注釋
import Person
class Customer(Person.Person):
def __init__(self, name, address, telephone, email, mail, number): #fixed number of arguments to pass for class instantiation
super(type(self), self).__init__(name, address, telephone, email) #Also here and not the use of `super`
#super().__init__(name, address, telephone, email) with Python 3+
self.mailing = True if mail == 'Y' else False #Fixed self.mailing expression
self.__mail = mail
self.__number = number
def set_mail(self, mail):
self.__mail = mail
def set_number(self, number):
self.__number = number
def get_mail(self):
return self.__mail
def get_number(self):
return self.__number
def mailList(self): #No need for mail argument
if self.mailing == True: #Just Check here self.mailing
return "On the mailing list"
else:
return "Not on the mailing list"
def __str__(self):
return "\nName: {}\nAddress: {}\ntelephone: {}\nEmail: {}\nMail: {}\nNumber: {}".\
format(self.get_name(), self.get_address(),\
self.get_telephone(), self.get_email()\
, self.mailList(),self.get_number())
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.