我正在尝试开发一个汽车经销商-客户模型,以真正理解使用Python的OOP。
我遇到的问题是,我想将Car
定义为与Dealer
类分开的类对象。这会造成混乱;例如,我如何使用Car
属性并将其上传到经销商库存中,然后根据获得的客户进行交易更新?
我现在把它分解成这两个类(Car
&Dealer
)。我想创建一个inventory
字典,model
是关键,retail_cost
函数的输出是车辆的成本。如何将car实例插入到类dealer中的经销商库存中?
class Car(object):
"""This class basically defines a car in its simplest components
and then computes a retail price in the method after initializing"""
def __init__(self,model,engine,prod_cost):
self.model = model
self.engine = engine
self.prod_cost = prod_cost
def retail_cost(self):
return self.prod_cost *1.20
class Dealer(object):
"""Defines the dealership itself with its inventory and sales components"""
car_inventory = {}
def __init__(self, dealer_name):
self.dealer_name = dealer_name
基本思想是将每个汽车实例添加到经销店,但请注意,我将car_inventory
更改为Dealer的实例成员。这是因为您希望创建的每个新经销商都有自己的汽车库存。如果您将其作为Dealer的类成员(您拥有它的方式),那么您创建的每个经销商都将拥有相同的库存。
class Car(object):
"""This class basically defines a car in its simplest components
and then computes a retail price in the method after initializing"""
def __init__(self,model,engine,prod_cost):
self.model = model
self.engine = engine
self.prod_cost = prod_cost
def retail_cost(self):
return self.prod_cost *1.20
class Dealer(object):
"""Defines the dealership itself with its inventory sales components"""
def __init__(self, dealer_name):
self.dealer_name = dealer_name
self.car_inventory = []
car1 = Car("ford", "fiesta", '18,000')
car2 = Car("ford", "fiesta", '12,000')
dealer = Dealer("tom's dealership")
dealer.car_inventory.append(car1)
dealer.car_inventory.append(car2)
print(dealer.car_inventory)
首先,car_inventory
应该是一个实例变量,而不是一个类变量。这允许每个经销商拥有自己的库存。
def __init__(self, dealer_name):
self.dealer_name = dealer_name
self.car_inventory = {}
现在你可以创建Dealer
对象了:
dealer_alice = Dealer('Alice')
dealer_bob = Dealer('Bob')
创建Car
对象
car_1 = Car('Corolla', 'V4', 12000)
car_2 = Car('Focus', 'V4', 13000)
并将它们添加到经销商的库存中:
dealer_alice.car_inventory['Corolla'] = car_1
dealer_bob.car_inventory['Focus'] = car_2
或者实例化新车并将它们直接添加到库存中:
dealer_alice.car_inventory['Jetta'] = Car('Jetta', 'V6', 18000)
dealer_bob.car_inventory['Mustang'] = Car('Mustang', 'V8', 17000)
每个经销商现在都有一个库存字典,其中键是表示型号的字符串,值是Car
对象。你可以像这样打印它们:
for model,car in dealer_alice.car_inventory.items():
print(model, car)
请注意,这将打印一个漂亮的模型名称,如'Jetta'
,但Car
对象将只打印基本信息-即类的名称和对象在内存中的位置。如果想要更好的输出,就必须为Car
类定义一个__str__()
方法。对于Dealer
类也可以这样做,这样您就可以只使用print(dealer_bob)
并获得整洁的输出。
我还建议选择其他类型的钥匙(如VIN) -事实上,如果经销商得到另一辆相同型号的车,它只会覆盖现有的。