从类实例继承的公约,以添加细节/功能

时间:2014-06-04 19:53:18

标签: python class inheritance conventions

我有一个名为Image

的类
class Image(object):
    def __init__(self,rgb_img):
        self.img_time = time.time()
        self.img_colr = rgb_img

我想稍后在这个类上存储更多信息(图像关键点,灰度等),并且相信完全创建一个新类更清楚。但我不知道这方面的最佳做法。继承了我的猜测:

img = Image(rgb_img)
class DetailedImage(object):
    def __init__(self, img, kp, grey):
        self = img
        self.kp = kp
        self.grey = grey

但是,这个选项是隐含的。 img参数必须是Image实例并不是很明显。

使用其他类中的实例创建新类的最佳做法是什么? (如果我有一个农民,他训练成为一名战士,我如何将实例化的农民阶级的信息传递给一个单独的战士班?)这是一个好主意吗?

2 个答案:

答案 0 :(得分:1)

正如我在评论中所说:分配给self让我感到畏缩,不要这样做。

除此之外,您还有很多选择如何获得所需。

使用构图:

class DetailedImage(object): 

    def __init__(self, img): 
        """
        :param Image img: Internal image 
        """
        self.img = img

在这种情况下,我使用sphinx格式的docstrings指定了参数类型。

使用普通的python继承。

Python继承(甚至是多继承)是有用的,并且比其他语言更好。我会把你推荐给博士,而不是写太长的答案。或者看到这个:How does Python's super() work with multiple inheritance?

答案 1 :(得分:0)

您只需向python类实例添加任何属性,您无需定义特殊类:

img = Image(rgb_img)
img.kp = kp
img.grey = grey