2017-03-08 7 views
2

私は驚くべきライブラリを使用して非常にエレガントな方法で多くのオブジェクト属性を定義しています。Python attrs library:他の属性を使用してattr.ib(デフォルト=)を定義します

私が現在抱いている唯一の問題は、他のattr.ib()属性を参照してデフォルト値を定義することが時々あるということです。ここでnameのデフォルトは静的な文字列であれば実行しますいくつかのコードは次のとおりです。

import attr 
from attr.validators import instance_of 
import datetime 

@attr.s 
class Something: 
    some_date = attr.ib(validator=instance_of(datetime.date)) 
    some_number = attr.ib(convert=float) 
    name = attr.ib(validator=instance_of(str), 
        default="Generic Name {0} - {1}%".format(
         some_date.strftime("%d-%b-%Y"), 
         some_number * 100) 
        ) 

something_instance = Something(some_date=datetime.date.today(), some_number=0.375) 

問題はnameAttributeError(それゆえ私が得る、floatdateが、_CountingAttrオブジェクトを見ていないということですsome_number * 100についてはTypeError)。私はselfのどちらも参照できないので、どうすればいいですか?

答えて

2

これは現時点ではデフォルトのキーワードでは不可能と思われます。それは基本的に

def __attrs_post_init__(self): 
    if self.name is None: 
     self.name = "Generic Name {0} - {1}%".format(
      self.some_date.strftime("%d-%b-%Y"), 
      self.some_number * 100) 

クレジットを追加するに降りてくるでしょう私の例ではhttp://attrs.readthedocs.io/en/stable/examples.html?highlight=attrs_post_init#other-goodies

:しかし、同じ効果を達成するために、それは、インスタンスの初期化の後に任意の計算を実行するために使用することができます__attrs_post_init__方法を、使用することが可能です私を正しい方向に向けるattrs github issue trackerに行きます。

関連する問題