私は(コード内の任意の問題を言い訳、メモリをオフに行く)などのデコレータを書いてみました:クラスの必須プロパティを定義するためのデコレータの作成方法
def required(fn):
def wrapped(self):
self.required_attributes += [fn.__name__]
fn(self)
return wrapped
と私は例えば、クラスで@property属性を飾るためにこれを使用:
@property
@required
def some_property(self):
return self._some_property
。今、私はこれがで更新するrequired_attributesためにために動作しないことを忘れてしまった
def validate_required_attributes(instance):
for attribute in instance.required_attributes:
if not hasattr(instance, attribute):
raise ValueError(f"Required attribute {attribute} was not set!")
:私はこのような何かを行うことができることを..soプロパティの名前は、まずプロパティを取得する必要があります。だから本質的には、私がのをクラスに入れると、self.propertynameを追加して追加することができます...しかし、この解決法はあまりうまくいきません。また、必要な属性名のリストを初期。
デコレータはコンパイル時に適用されるので、ラップされた関数を定義する前にrequired_attributesを変更することはできません。私はこの仕事をすることができる別の方法はありますか?私はちょうど良い、エレガントなソリューションが欲しいです。
ありがとうございます!
'def __init __(self、required_one、required_two)'の何が問題なのですか? –