我目前正在使用具有多个计算级别的定价工具。

例如,我有一个对象Quote,其本身附加了一个或多个QuoteItem。

我认为应该有类继承,但是我不想每次创建QuoteItem时都要初始化Quote,因为所有QuoteItem都共享具有相同特征的完全相同Quote。

那是超类的类继承吗?还是应该是2个独立班级?
我找不到关于我的场景的任何文档或资源,我认为这很常见。

我有一个附加在一个引号上的引号清单,我想先创建引号,然后再创建引号。如果我从引号开始,我觉得它每次都会创建一个根本不是预期行为的引号,因为所有引号都应该只有一个引号。

那是正确的方法吗?

class Quote():
    def __init__():
        # this will set parameter global to the quote
        print('Quote created')


class QuoteItem(Quote):
    def __init__():
        # this will set specific details for all quote items attached to one specific quote
        print ('QuoteItem created')


还是那两个类应该完全独立?

欢迎使用任何有关这种情况的用例或文档。
我发现的父级/子类文档仅处理非常相似的对象。在我的示例中,它们是不一样的,它们是子代,即引用项目不能不加引号而存在。

谢谢

最佳答案

考虑继承时,您使用的是“是”关系。

class Vehicle(object):  # a Vehicle IS AN object
    pass
class Car(Vehicle):     # a Car     IS A  Vehicle
    pass
class Sedan(Car):       # A Sedan   IS A  Car
    pass


您可能在报价及其项目中查找的是“具有”关系。

class Tire(object):     # a Tire IS AN object, but...
    pass

class Vehicle(object):
    def __init__(self, num_tires=4):
        self.tires = [Tire() for _ in num_tires]
                        # a Vehicle HAS A Tire  (or in this case 4 tires)


要针对您的特定用例扩展隐喻:

class QuoteItem(object):
    def __init__(self, modelnumber, quantity, totalprice):
        self.modelnumber = modelnumber
        self.quantity = quantity
        self.totalprice = totalprice
        # I'm guessing at what you'd want here


class Quote(object):
    _last_quote_number = 0

    @property
    @classmethod
    def next_quote_number(cls) -> int:
        cls._last_quote_number += 1
        return cls._last_quote_number

    def __init__(self, customerid):
        self.number = self.next_quote_number
        self.customerid = customerid
        self.items = []

    def add_item(self, modelnumber, quantity, totalprice) -> None:
        item = QuoteItem(modelnumber, quantity, totalprice)
        self.items.append(item)

关于python - python中的父/子类结构,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56516951/

10-10 06:13