投稿/コメントを表示します。

動画3:56 親クラス BaseAssetの__init__メソッドの仮引数に、**kwargsを追加する点について、確認したいことがあります。
お手数をおかけしますが、どうぞよろしくお願いいたします。

クラスとインスタンスのread.md P7に「__init__等のオーバーライドされるメソッドの仮引数に、*args,**kwargs等を置いて、任意の引数を受け取れるようにするケースもまま見うけられる。」という説明がございます。
インスタンスを生成する時に、辞書型の引数を複数渡す必要がある時に便利だと思いました。

今回の講座で、親クラス BaseAssetの__init__メソッドに、仮引数 **kwargsを任意で受け取れるよう追加を行ってます。
仮引数**kwargsを追加すると、親クラスのコンストラクタが呼び出された際に、kwargs={}とkwargs={dict:0}という初期値ができます。

ただし、親クラス BaseAssetの__init__メソッドに、仮引数 **kwargsを追加しないでも、class Stockのコンストラクタでself.dateと、self.traderの属性を初期化することができました。

今回のように、子クラスから呼び出される親クラスの__init__メソッドについて、子クラスで追加の属性を初期化する可能性がある場合は、親クラスの__init__メソッドて仮引数を追加したほうがいいのでしょうか。

お手数をおかけしますが、ご教示いただけるとありがたいです。
どうぞよろしくお願いいたします。
class BaseAsset:

    def __init__(self,type_name,total_price,amount,**kwargs):
        if type_name not in self.allowed_types:
            raise ValueError(f'許可されてない商品{type_name}')
        self.type_name = type_name
        self.total_price = total_price
        self.amount = amount

class Stock(BaseAsset):

    def __init__(self,type_name,total_price,amount,date='',trader=''):
        super().__init__(type_name,total_price,amount,)

        self.date = date
        self.trader = trader

2022/11/25 19:29