我对使用 Python 作为 OOP 相对陌生,我来自 Java 的背景。您如何在 Python 中编写等效于 JavaBean 的类?基本上,我需要一个具有以下特点的类:
- 实现可序列化。
- 具有 getter 和 setter -> 私有属性
- 虚构构造函数
有什么建议吗? 我正在寻找示例代码!
我对使用 Python 作为 OOP 相对陌生,我来自 Java 的背景。您如何在 Python 中编写等效于 JavaBean 的类?基本上,我需要一个具有以下特点的类:
有什么建议吗? 我正在寻找示例代码!
你做不到,因为Python不是Java。最有可能的情况是你应该编写一个较不琐碎的类,构造一个命名元组, 传递一个字典或类似的东西。但是为了回答这个问题:
serializable
和“实现接口”都没有意义(当然,在某些框架和高级用例中是有意义的,但不适用于此处)。序列化模块,例如pickle
,可以在不实现或继承任何特殊内容的情况下工作(您可以以其他方式自定义该过程,但几乎永远不需要)。property
。AttributeError
)。namedtuple
实例是不可变的,因此不适用于状态会发生改变的对象。 - ccpizza构造函数'chain'的示例:
>>> class A(object):
... def __init__(self):
... print("A")
...
...
>>> class B(A): pass # has no explicit contructor
...
>>> b = B()
A
>>>
我建议你阅读@delnan所写的内容,同时也可以看看这篇文章:http://dirtsimple.org/2004/12/python-is-not-java.html -- Java和Python有着截然不同的文化,需要一些时间去深入了解和欣赏。
另外,在编写代码后,将其与常见的惯用语进行比较可能会很有帮助,例如在这里列出的(我确实通过这种方式学到了很多):
pickle
不安全、速度慢或无法处理您的高级对象时,该怎么办? - Jakob Bowyercopyreg
或 __reduce__
来自定义 pickle 如何处理您的高级对象。 - user395760正如miku所指出的:
对象可以通过picke模块进行序列化,但没有需要实现的接口,Python不是Java。
Python中没有私有属性,通常人们使用bar(下划线)表示私有属性,但它们可以从外部访问。Getter和setter浪费了CPU和程序员的时间。
对于miku的回答没有什么可补充的。