实际上我的问题在此之前已经讨论过了:How can I use descriptors for non-static methods?

并且有一些很好的方法,特别命名其中3个:

  • 使用属性并单独定义getter和setter(接受的解决方案,但它失去了封装)

  • 使用ClassFactory创建单独的类只是为了使静态字段分开(Nice解决方法但不是真正的解决方案)

  • 忽略描述符和属性功能,只需正常使用set和get函数 . (发起问题的人最终选择的解决方案,只是因为它是最简单的,我想!)

所有上述解决方案都运行良好,但对我来说,它们都不完整 . 您可以在括号中查看我对每个提供的解决方案的评论 .

现在我想再次提出同样的问题,但这一次考虑到这个特定的用例:

我正在为其他开发人员创建一些帮助程序,我想隐藏(封装)帮助程序类中的所有冗余内容,并且可以轻松地将其用于其他开发人员,后者可能对这些属性一无所知 .

这是我希望开发人员使用的示例:

class TestStruct(BaseStruct):
    # define structure
    field1 = SomeField()
    field2 = OtherField()
    field3 = NextField()

BaseStruct和SomeField / OtherField / ThirdField是辅助类的一部分,其他开发人员只看到它们而不是使用它们 .

然后他们可以专注于结构定义而不是定义属性等等,他们只会使用如下字段:

my_struct = TestStruct()
my_struct.field1 = SOME_VALUE
...

但问题是字段被定义为静态成员,在这种情况下我们知道静态字段的所有下部 .

所以问题是如何通过将定义属性(或其他任何东西)的所有复杂性移动到BaseStruct中,如何使它们非静态并仍然保持TestStruct中的结构简单 .

请注意,这些字段是由其他开发人员定义的,我们不了解它们 .

感谢Python 2或3中的任何建议 .