プロパティを格納する必要があるクラスを作成する場合は、@property
デコレータを使用するのが適切な場合は、いつ__init__
でそれらを定義すればよいですか?私は考えることができる__init__と@propertyでクラス属性を宣言する
理由は:
は、私はこれが正常に動作しますclass Apple:
def __init__(self):
self.foodType = "fruit"
self.edible = True
self.color = "red"
のようなクラスを持っていると言います。
class Apple:
@property
def foodType(self):
return "fruit"
@property
def edible(self):
return True
@property
def color(self):
return "red"
しかし、私は遅く方法(インターネット上でデータをフェッチし、発言権を)持っているより複雑なクラスを、持っていると言う。この場合、それは私のようにクラスを記述するべきではないと私にはかなり明確です。私は__init__
この割り当て属性を実装できる
:
class Apple:
def __init__(self):
self.wikipedia_url = "https://en.wikipedia.org/wiki/Apple"
self.wikipedia_article_content = requests.get(self.wikipedia_url).text
またはI @property
でこれを実装することができ:ここで
class Apple:
def __init__(self):
self.wikipedia_url = "https://en.wikipedia.org/wiki/Apple"
@property
def wikipedia_article_content(self):
return requests.get(self.wikipedia_url).text
を、後者は約50,000倍高速インスタンス化することです。しかし、私はwikipedia_article_content
複数回フェッチされた場合、前者の方が高速であることを主張することができます:それは三番目要求の数を持っているので、その場合には
a = Apple()
a.wikipedia_article_content
a.wikipedia_article_content
a.wikipedia_article_content
、前者は〜3倍高速です。
私の質問
は、これら二つの方法私が考えたもので割り当てるプロパティの唯一の違いですか? @property
は、時間を節約する以外に何かできますか(場合によっては)?割り当てに時間がかかるプロパティの場合、それらを割り当てる「正しい方法」がありますか?