繁体   English   中英

OOP 中的类变量

[英]Class variables in OOP

我正在尝试开发一个汽车经销商客户模型,以使用 Python 真正理解 OOP。

我遇到的问题是我想将Car定义为与Dealer类不同的类对象。 这会引起混乱; 例如,我如何使用Car属性并将其上传到经销商库存中,然后根据客户获取情况进行交易更新?

我现在将它分解为这两个类( CarDealer )。 我想创建一个inventory字典, model是关键,我的retail_cost成本函数的输出是车辆的成本。 如何将汽车实例插入到类经销商的经销商库存中?

例如:

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更改为经销商的实例成员。 这是因为您希望您创建的每个新经销商都有自己的 car_inventory。 如果您将其保留为 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)——事实上,如果经销商获得另一辆相同型号的汽车,它只会覆盖现有的汽车。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM