我想休·博思韋爾是在正確的軌道上,但它可以更簡明地完成:
class MyClass(object):
_defaults = "attr1", "attr2", "attr3"
_default_value = None
def __init__(self, **kwargs):
self.__dict__.update(dict.fromkeys(self._defaults, self._default_value))
self.__dict__.update(kwargs)
my_object = MyClass(attr3='overridden', attr4='added')
print(vars(my_object))
輸出:
{'attr4': 'added', 'attr2': None, 'attr3': 'overridden', 'attr1': None}
我做_defaults
和_default_value
類屬性(其可以改變在運行時)。(提供可變默認值可能會需要額外的代碼,以防止它通過創建的每個實例上被共享,但是。)
這將是容易擴展,以允許每個默認屬性定義不同的(不可變)的默認值:
class MyClass(object):
_defaults = {
"attr1": None,
"attr2": 0,
"attr3": ""
}
def __init__(self, **kwargs):
self.__dict__.update(self._defaults)
self.__dict__.update(kwargs)
my_object = MyClass(attr3='overridden', attr4='added')
print(vars(my_object))
輸出:
{'attr4': 'added', 'attr2': 0, 'attr3': 'overridden', 'attr1': None}
你想要那些沒有添加默認值'None'的值嗎?不知道如何更新信息... – martineau
我真的不知道什麼是最pythonic的方式,我只是知道,我不能給所有的屬性值創建對象。 –
通常它們都是在'__init __()'方法中定義的,即使只是將它們設置爲'0','None'或''''作爲將它們全部記錄下來的方式。另一方面,除非對象處於某種特定狀態,否則完全可以不定義一個對象,但其他對象可能難以理解。 – martineau