我目前正在使用具有多个计算级别的定价工具。
例如,我有一个对象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/