我使用Python作为OOP相当新。我来自Java背景。你会如何在python中编写一个javabean等价物?基本上,我需要一个课程:
任何输入?我正在寻找示例代码!
答案 0 :(得分:28)
你没有,因为Python is not Java。你最有可能只是写一个不那么琐碎的类,构造一个namedtuple,传递一个字典,或类似的东西。但要回答这个问题:
serializable
和“实现接口”都没有在Python中有意义(好吧,在某些框架和高级用例中它确实如此,但不是在这里)。序列化模块(例如pickle
)可以在不实现或继承任何特殊内容的情况下工作(您可以通过其他方式自定义该过程,但您几乎不需要)。property
。AttributeError
。)答案 1 :(得分:3)
构造函数'示例
:>>> 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有着截然不同的文化,需要一些时间才能深入研究(和欣赏)两者。
此外,在编写了一些代码之后,将它与常用习语进行比较可能会有所帮助,如此处列出的那样(我当然通过这种方式学到了很多东西):
答案 2 :(得分:2)
实现可序列化。
选择您喜欢的格式,并编写一个将为您序列化的函数。 JSON,Pickle,YAML,任何工作。刚决定!
有吸气剂和二传手 - >私人财产
我们在这里不这样做,那些是束缚语言的属性,我们都是这种语言的成年人。
虚拟构造函数
再次不是我们真正担心的事情,因为我们的构造函数比其他语言更聪明一些。因此,您只需定义一个__init__
,它就可以完成所有初始化,如果您必须编写工厂或子类。
答案 3 :(得分:1)
正如miku指出的那样:
对象可以通过picke模块序列化,但是没有要实现的接口,Python不是Java。
python中没有私有属性,通常人们使用 bar (下划线)来表示私有属性,但可以从外部世界访问它们。吸气剂和制定者浪费了CPU和程序员的时间。
无需添加到miku答案。
关于属性:Real world example about how to use property feature in python?
答案 4 :(得分:0)
好吧,我认为data classes与Java Bean类似,并且使用Java Bean实际上是一个好主意,因为它删除了样板。