Просто тестируем @meissner_ комментарий: вы можете легко заменить d
внутри ваших подкалок на другие.
class BaseA():
"""Provides basic initialization for dicts used in A() and deriveds."""
@classmethod
def InitDefaults(cls):
return { 1: "this", 2:"are", 3:"some", 4:"defaults"}
class A():
d = BaseA.InitDefaults()
class B(A):
d = BaseA.InitDefaults()
class C(A):
d = BaseA.InitDefaults()
print(A.d)
print(B.d)
print(C.d)
print("\n")
B.d[99] = "Not a default"
C.d[42] = "Not THE answer"
print(A.d)
print(B.d)
print(C.d)
Вывод:
{1: 'this', 2: 'are', 3: 'some', 4: 'defaults'}
{1: 'this', 2: 'are', 3: 'some', 4: 'defaults'}
{1: 'this', 2: 'are', 3: 'some', 4: 'defaults'}
{1: 'this', 2: 'are', 3: 'some', 4: 'defaults'}
{1: 'this', 2: 'are', 3: 'some', 4: 'defaults', 99: 'Not a default'}
{1: 'this', 2: 'are', 3: 'some', 4: 'defaults', 42: 'Not THE answer'}
Это немного уродливо, ноРабота.У вас есть центральное место для кода, модифицирующего «base-default», и A, B, C получают разные диктовки - инициированные одинаково - которые могут развиваться в разных направлениях.
Вероятно, лучше было бы использовать Instances и init () хотя ...