Ваша ошибка заключалась в том, что вы использовали class Agent
для хранения свойств, а также для их создания и назначения типа покупки.Разделение проблем, когда каждый объект делает только то, что должен, вероятно, является лучшим подходом.
Возможно, вы захотите иметь класс для Properties, который инкапсулирует тип имущества и тип покупки.
Вы также можете отделить обработку Properties
от обработки Agent
Тогда, потому что вы хотите улучшить свои навыки программирования, и вы использовали термины Property type
,и Purchase type
, я предлагаю вам использовать Enums
для создания правильного «типа» для этих объектов.
В следующем примере у вас есть агенты, у которых есть набор свойств.
Свойствоимеет два атрибута: тип свойства и тип транзакции.
from enum import Enum
class PropertyType(Enum):
HOUSE = 1, 'house'
APPARTMENT = 2
def __str__(self):
return self.name
class PurchaseType(Enum):
PURCHASE = 1
RENTAL = 2
def __str__(self):
return self.name
class Property:
"""represents one property"""
def __init__(self, property_type, purchase_type):
self.property_type = property_type
self.purchase_type = purchase_type
def __str__(self):
return f'{self.property_type}, {self.purchase_type}'
class Properties:
"""represents a collection of properties"""
def __init__(self):
self.properties = []
def __iter__(self):
for ppty in self.properties:
yield ppty
def add_property(self, new_property):
self.properties.append(new_property)
def __str__(self):
return '\n'.join('\t' + str(ppty) for ppty in self)
class Agent():
"""represents a real estate agens with his properties"""
def __init__(self, name):
self.name = name
self.properties = Properties()
def add_property(self, new_property):
self.properties.add_property(new_property)
def __str__(self):
return f'{self.name}: \n{str(self.properties)}'
agent_john = Agent('John')
agent_john.add_property(Property(PropertyType.HOUSE, PurchaseType.PURCHASE))
agent_john.add_property(Property(PropertyType.APPARTMENT, PurchaseType.RENTAL))
print(agent_john)
output:
John:
HOUSE, PURCHASE
APPARTMENT, RENTAL
Что, вероятно, все еще отсутствует, - это коллекция Agent