<p>这个答案假设DogHabits比一个简单的列表要复杂得多,并且确实值得一个拥有自己继承的专用类</p>
<p>从设计的角度来看,我可以看到关于<code>habits</code>和<code>type</code>应该是类成员还是实例成员的第一个问题。在这里,这个答案再次假设有理由让他们成为实例成员</p>
<p>我将使<code>Habits</code>成为<code>Dogs</code>的内部类,并在类文档中声明,可以通过在<code>Dogs</code>的子类中构建它的子类来定制:</p>
<pre><code> class Dog:
class Habits:
"""Represents the habits of a Dog.
It can be customized in a child class by creating in the subclass an
inner class named Habits that would be a subclass of Dog.Habits
"""
def __init__(self):
self.habits = ['lick butt']
def __init__(self, typ='generic_dog'):
self.type = typ
self.my_habits = self.__class__.Habits()
def do_stuff(self):
for habit in self.my_habits.habits:
print(habit)
class GermanShepherd(Dog):
class Habits(Dog.Habits):
def __init__(self):
super().__init__()
self.habits.extend(['herd sheep'])
def __init__(self):
super().__init__('german shepherd')
class Labrador(Dog):
class Habits(Dog.Habits):
def __init__(self):
super().__init__()
self.habits.extend(['hunt', 'pee on owner'])
def __init__(self):
super().__init__('labrador')
</code></pre>