我有一堂课,看起来像这样:
class Product(BaseModel):
code: str = ...
discription_one: str = ...
famille: FamilleProduct
sou_famille: SouFamileProduct
parent: ParentProduct
sou_parent: SouParentProduct
group: GroupProduct
sou_group: SouGroupProduct
reference: Optional[str] = ''
oem: Optional[str] = ''
other_code: Optional[str] = ''
discription_two: Optional[str] = ''
discription_three: Optional[str] = ''
remarque: Optional[str] = ''
marque: Marque
origine: Country
unite: UniteProduct
code_sh: ShCode
numbre_serie: NumbreSerie
qr_code: QrProduct
status: StatusProduct
product_visible: bool = True
product_loocked: bool = False
product_hided: bool = False
location: LocationProduct
last_prix_achat: float = 0.00
pmp_achat: float = 0.00
prix_achat_devise: List[PrixAchat]
prix_vente: List[PrixVente]
tva: TvaProduct
tax: TaxProduct
qtt_achat: float = 0.00
qtt_actuel: float = 0.00
qtt_vente: float = 0.00
qtt_min: float = 0.00
qtt_max: float = 0.00
qtt_arrivage: float = 0.00
qtt_cmdfr: float = 0.00
qtt_cmdcl: float = 0.00
date_fab: datetime = None
date_exp: datetime = None
created_at: datetime = None
updated_at: datetime = None
images: List[ImageProduct] = None
Run Code Online (Sandbox Code Playgroud)
当我尝试编写一个函数来创建此模型时,我发现自己正在处理一个参数过多的函数:
def creat_product(self,a: str, b: str, c: None, d: None, e: None, f: None, g: None, h: None, i: str
j: str, k: str, l: str, m: str, n: str) -> Product:
return Product(
code=a,
discription_one=b,
famille=c,
sou_famille=d,
parent=e,
sou_parent=f,
group=g,
sou_group=h,
reference=i,
oem=j,
other_code=k,
discription_two=l,
discription_three=m,
remarque=n,...# and other paramaters)
Run Code Online (Sandbox Code Playgroud)
对于所有带有值的参数None,是否可以在调用时添加它们creat_product或保留它们None?还有其他方法可以做到这一点吗?
您可以使用**kwargsorder 来指定您的函数可以接受任意数量的参数。虽然这意味着您将能够通过提供比所需参数更少的参数来调用该函数Product- 但是任何问题都将直接从构造函数报告。
def creat_product(self, **kwargs) -> Product:
return Product(**kwargs)
Run Code Online (Sandbox Code Playgroud)
你应该能够像以前一样调用它:
self.create_product(a='a', b='b', ...)
Run Code Online (Sandbox Code Playgroud)
请注意,通过这种方式,您可以通过提供字典作为参数来调用该函数。例如,
my_args = {'a': 'val1', 'b': 'val2', ...}
create_product(**my_args)
Run Code Online (Sandbox Code Playgroud)
作为旁注,我猜这create_product是一个替代构造函数,因此将其更改为类方法更有意义:
@classmethod
def creat_product(cls, **kwargs):
return cls(**kwargs)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2747 次 |
| 最近记录: |