В настоящее время я изучаю OOP и столкнулся с проблемой более сложных методов и наследования.
У меня есть 2 родительских класса (оба с собственным init), которые наследуются подклассу, и я хочу строку представление данных, инициализированных во всех классах, вместе.
Это проблема:
#Parent class 1:
class Contact:
all_contacts = []
def __init__(self,name='',email='',**kwargs):
self.name = name
self.email = email
Contact.all_contacts.append(self)
def __str__(self):
return f'the name is {self.name}, and the mail is {self.mail}.'
#Parent class 2:
class AddressHolder:
def __init__(self, street='', city='', state='', code='', **kwargs):
self.street = street
self.city = city
self.state = state
self.code = code
def __str__(self):
return f'the street is {self.street}, the city is {self.city},
the state is {self.state}, the code is {self.code}'
#Subclass that inherits from both parent classes:
class Friends(Contact, AddressHolder):
def __init__(self, phone='', **kwargs):
self.phone = phone
super().__init__(**kwargs)
def __str__(self):
return f'''The phone is {self.phone}.'''
#The instance of the class
f = Friends(phone='aphone', name='aname', mail='amail',
street='astreet', city='acity', state='astate', code='acode')
print(f)
Это будет печатать только инициализацию телефона.
Попытался сделать это, чтобы сделать это поэтому все __str__
напечатаны, но это не сработало:
def __str__(self):
super(Contact.self).__str__()
super(AddressHolder.self).__str__()
return f'''The phone is {self.phone}.'''
Первоначально я пытался поместить все в подкласс Friends
, как это, так как он был унаследован, он должен работать:
def __str__(self):
return f'''The phone is {self.phone},
the street is {self.street},
the city is {self.city},
the state is {self.state},
the code is {self.code},
the name is {self.name},
and the mail is {self.mail}.'''
Но я получил ошибку `` `` AttributeError: 'Friends' не имеет атрибута 'street'``` (не было той точки наследования, что я мог работать на подклассе с родительским классом данные?).
Я дал каждому классу свой собственный __str__
, что, возможно, является плохим кодом, но тоже не работает.
Как я могу напечатать все данные унаследованных классов плюс подкласс?
Каков предел наследование, если я получил ошибку «[подкласс] не имеет атрибута»?