【问题标题】:Customized Trait built from multiple inheritance从多重继承构建的自定义特征
【发布时间】:2015-06-10 15:20:30
【问题描述】:

我正在尝试创建一个代表unipath.Path 对象的custom trait。重用File trait 提供的机制似乎是有利的,所以我的想法是使用多重继承。

from unipath import Path
from traits import File

class PathTrait(Path,File):
    pass

class A(HasTraits):
    p = PathTrait()

然而,当我通过A(p='/tmp/') 使用它时,A.p 没有任何与Path 对象关联的方法,正如我所料。我应该实现getset 方法吗?

【问题讨论】:

    标签: python enthought traits


    【解决方案1】:

    你认为A(p='/tmp')应该做什么?

    我可以告诉你你想做什么,但如果你的代码是正确的,这个语句应该会失败,TypeError。不是类型错误,而是用字符串替换 A 对象上的变量 P,该对象以前是 PathTrait 的实例。

    您正在尝试做的事情在概念上是混淆的。 File 是一个代表 trait 对象的类。从技术上讲,python 允许你扩展这个对象,因为 python 几乎没有类型安全性,但这并不意味着你的 python 类现在会突然像一个 trait。

    要定义自定义特征,您需要使用设计用于操作特征的工具,例如 Trait 构造函数。

    【讨论】:

    • 我想要File trait 的验证和traits-ui 方法,但想使用__init__Path 对象的所有其他方法。它们似乎提供了不干扰的功能,所以我认为多重继承会起作用。也许你的意思是,这是一个严重的简化。一个如何将现有类转换为 Trait 的简单示例会很不错。
    • 为什么不使用带有Instance(Path) 对象和File 属性的HasTraits 实例,该属性在Path 对象上获取和设置值?对我来说,这是比定义自定义处理程序更简单的选择。
    猜你喜欢
    • 1970-01-01
    • 2013-12-21
    • 2021-10-17
    • 1970-01-01
    • 2020-11-11
    • 1970-01-01
    • 2011-07-28
    • 2012-12-17
    • 1970-01-01
    相关资源
    最近更新 更多