【发布时间】:2012-09-11 20:08:25
【问题描述】:
我正在努力为以下班级组织寻找“pythonic”方法:
我有一个基类,其属性在其构造函数中初始化,例如:
class Animal(object):
def __init__(self, class_, species, is_domesticated):
self.class_ = class_
self.species = species
self.is_domesticated = is_domesticated
然后,当我进行子类化时,我想“硬编码”这些属性中的一个或多个,如下所示:
class Mammal(Animal):
def __init__(self, species, is_domesticated):
Animal.__init__(self, 'Mammal', species, is_domesticated)
因此,哺乳动物的实例化如下:
monkey = Mammal('Primate', false)
问题是,我想使用 *args 以便在更改基类定义时不理会任何派生类。因此哺乳动物的定义变为:
class Mammal(Animal):
def __init__(self, *args):
Animal.__init(self, *(args + (class_='Mammal',)))
这(不用说)看起来很可怕。一些提示将不胜感激 =)
【问题讨论】:
-
来自
import this:显式优于隐式。我会说你的第一次尝试看起来不错! -
当您将参数添加到它们也应该接受的基类时,您并不是“独自离开派生类”。您只是通过不记录参数来使客户端代码作者变得困难。
-
也许你可以使用带有默认值的可选参数(比如
is_deomesticated=False...)?
标签: python oop inheritance args iterable-unpacking