【问题标题】:Convention for inheritance from class instance to add details/functionality从类实例继承以添加细节/功能的约定
【发布时间】:2014-06-04 19:53:18
【问题描述】:

我有一个名为 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 实例并不是很明显。

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

【问题讨论】:

  • 你的方法可能没有达到你想要做的——见stackoverflow.com/questions/1216356/…
  • 分配给自己的想法让我畏缩!如果必须继承,为什么不直接继承——使用组合。
  • @jb 想提交答案?这就是我问这个问题的确切原因。在实施/最佳实践方面需要帮助。
  • @PaulSeeb 给你!

标签: python class inheritance conventions


【解决方案1】:

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

除此之外,您还有很多选择来获得所需的东西。

使用组合:

class DetailedImage(object): 

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

在这种情况下,我使用sphinx 格式的文档字符串指定参数类型。

使用正常的python继承。

Python 继承(甚至是多重继承)很有用,而且比其他语言更好。我宁愿将您推荐给文档,也不愿写太长的答案。或者看到这个:How does Python's super() work with multiple inheritance?

【讨论】:

    【解决方案2】:

    你可以简单地为python类实例添加任何属性,你不需要定义一个特殊的类:

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

    【讨论】:

    • 我想明确说明课堂上有哪些数据。在大型程序中随意添加属性很难遵循。
    • 你只知道,如果你把它与没有这个属性的类分开,类上有什么数据。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-06
    • 2018-07-01
    • 1970-01-01
    • 2012-08-15
    相关资源
    最近更新 更多