سلام وقت بخیر تابع search براساس فیلد هایی در تعاریف هستد یعنی همان محله و قیمت ومتراژ وتعداد خواب برا یمن خروجی نمایش نمیدهد و فقط براساس floorخروجی را صحیح به من نمایش میدهد ممنون میشم چک کنید
قسمتی از کدها به صورت زیر است :
class BaseClass(ABC):
_id = 0
objects_list = None
manager=None
def __init__(self, *args, **kwargs):
self.id = self.generate_id()
self.store(self)
self.set_manager()
super().__init__(*args, **kwargs)
@classmethod
def generate_id(cls):
cls._id += 1
return cls._id
@classmethod
def set_manager(cls):
if cls.manager is None:
cls.manager = Manager(cls)
@classmethod
def store(cls, obj):
if cls.objects_list is None:
cls.objects_list=list()
cls.objects_list.append(obj)
class Apartement(EstateAbstract):
def __init__(self, has_elevator, has_parking, floor, *args, **kwargs):
self.has_elevator = has_elevator
self.has_parking = has_parking
self.floor = floor
super().__init__(*args, *kwargs)
def show_description(self):
print(f"Apartement: {self.id}\t area:{self.has_parking}")
class Rent(ABC):
def __init__(self, initial_price, monthly_price, convertable, discountable, *args, **kwargs):
self.initial_price = initial_price
self.monthly_price = monthly_price
self.convertable = convertable
self.discountable = discountable
super().__init__(*args, **kwargs)
def show_price(self):
print(f"monthly_price:{self.monthly_price}\t discountable:{self.discountable}")
class ApartementRent(BaseClass,Rent,Apartement):
def show_detail(self):
self.show_description()
self.show_price()
class Manager:
def __init__(self,_class=None):
self._class=_class
def __str__(self):
return f"{self._class}"
def search(self,**kwargs):
"""
:param kwargs: a=2,c=12,name='ali'
:return: obj(a=2,c=12,name='ali'
"""
result=list()
for key,value in kwargs.items():
for obj in self._class.objects_list:
if hasattr(obj,key) and getattr(obj,key)==value:
result.append(obj)
return result
def get(self,**kwargs):
for key,value in kwargs.items():
for obj in self._class.objects_list:
if hasattr(obj,key) and getattr(obj,key)==value:
return obj
reg1 = Region(name='R1')
reg2=Region(name='R2')
apt1 = Apartement(has_elevator=True, has_parking=True, floor=2,user=User.objects_list[0], area=80, rooms_count=2,
built_year=1383,region=reg1, address="some text....")
apartement_rent=ApartementRent(has_elevator=True, has_parking=True, floor=2,user=User.objects_list[3], area=20, rooms_count=3,
built_year=1354,region=reg1, address="some text....",initial_price=1200000, monthly_price=411000
, convertable=False, discountable=False)
search_result=ApartementRent.manager.search(floor=2)
print("Search result:",search_result)
print(ApartementRent.manager.get(floor=2))