实际上我的问题在此之前已经讨论过了: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中的任何建议 .