私があなたに夢中になっているような気がしないことを願っています。あなたが避けたいモデルを避けるために、プロパティ集約に関して私が考えていたものに似ています。
また、私はElixirが私を変えてくれた宣言的な雰囲気の一部を傷つけました。
私は、スタックオーバーフローのPython gurusがそれをどのように考えているのか、さらに良い選択肢があるのか不思議です。私は大きなkwargsが好きではない、私が好む大きなコンストラクタを避けることができれば。
#!/usr/bin/python
import inspect
from itertools import chain, ifilter
from pprint import pprint
from abc import ABCMeta
class Property(object):
def __init__(self, value=None):
self._x = value
def __repr__(self):
return str(self._x)
def getx(self):
return self._x
def setx(self, value):
self._x = value
def delx(self):
del self._x
value = property(getx, setx, delx, "I'm the property.")
class BaseClass(object):
unique_baseclass_thing = Property()
def get_prop_tree(self):
mro = self.__class__.__mro__
r = []
for i in xrange(0, len(mro) - 1):
child_prop_names = set(dir(mro[i]))
parent_prop_names = set(dir(mro[i+1]))
l_k = list(chain(child_prop_names - parent_prop_names))
l_n = [ (x, getattr(mro[i],x,None)) for x in l_k ]
l_p = list(ifilter(lambda y: y[1].__class__ == Property, l_n))
r.append(
(mro[i],
(dict
(l_p)
)
)
)
return r
def get_prop_list(self):
return list(chain(* [ x[1].items() for x in reversed(self.get_prop_tree()) ]))
class SubClass(BaseClass):
unique_subclass_thing = Property(1)
class SubSubClass(SubClass):
unique_subsubclass_thing_one = Property("blah")
unique_subsubclass_thing_two = Property("foo")
if __name__ == '__main__':
a = SubSubClass()
for b in a.get_prop_tree():
print '---------------'
print b[0].__name__
for prop in b[1].keys():
print "\t", prop, "=", b[1][prop].value
print
for prop in a.get_prop_list():
あなたはそれを実行...
SubSubClass
unique_subsubclass_thing_one = blah
unique_subsubclass_thing_two = foo
---------------
SubClass
unique_subclass_thing = 1
---------------
BaseClass
unique_baseclass_thing = None
unique_baseclass_thing None
unique_subclass_thing 1
unique_subsubclass_thing_one blah
unique_subsubclass_thing_two foo
あなたはcfgファイル名の衝突について正しいです。私は*このcfgファイルを持っているかどうかは良いアイデアかどうかは疑問だと思います...実際に多くのパラメータを持っているのであれば、何も表示されません。 – max
何らかの方法でより管理しやすくする。 cfgファイルでは、セクション(例:[this]のような古いウィンドウの.iniファイル)や接頭辞(heading.subheading.parameter)を使用するか、XMLのような本格的な階層構造を使用します。あなたの設定オブジェクトは同じ方法で構造化することができます。そこでは、関連するサブツリーだけに関数を渡すことができます。 –