JavaBean在Python中是等效的

我是使用Python作为OOP的新手。 我来自Java背景。 你将如何在python中编写一个javabean等价物? 基本上,我需要一个类:

  • 实现可序列化。
  • 拥有getter和setter - >私有属性
  • 虚拟构造函数
  • 任何投入? 我正在寻找一个示例代码!


    你不这样做,因为Python不是Java。 很可能你应该写一个不太平凡的类,构造一个namedtuple,传递一个字典或类似的东西。 但要回答这个问题:

  • 无论是可serializable还是“实现接口”在Python中都是有意义的(在一些框架和高级用例中,它不是这样)。 序列化模块(如pickle )在没有实现或继承任何特殊功能的情况下工作(您可以用其他方式自定义进程,但几乎不需要)。
  • 你不写写getters和setter。 你只是使用公共属性。 如果你以后需要一个非平凡的getter / setter,你可以透明地把它变成一个property
  • 除非您想创建属性并为它们设置默认值,否则不需要虚构构造函数。 但是这可能是一个坏主意(对于bean类),因为不向这些属性赋值很可能是错误,即使不是这样也是可疑的。 所以让Python为你捕捉这些错误(当访问一个不存在的AttributeError时,它会引发AttributeError )。

  • 你可以通过pickle模块序列化大多数对象;
  • Python中不存在私有属性(另请参阅:
  • python在类中有'private'变量吗?
  • Python类中的私有变量的实际实现);
  • 没有定义构造函数的类将使用默认值(根据方法解析顺序)。
  • 构造函数'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有不同的文化,潜水需要一些时间进入(并欣赏)两者。

    另外,在编写代码之后,将其与常见习惯用法进行比较可能会有所帮助(如下所示)(我肯定了解了很多):

  • http://www.jeffknupp.com/blog/2012/10/04/writing-idiomatic-python/
  • http://python.net/~goodger/projects/pycon/2007/idiomatic/handout.html
  • http://python3porting.com/improving.html

  • 实现可序列化。

    选择你喜欢的格式,并编写一个函数,将它序列化为你。 JSON,Pickle,YAML,任何工作。 只要决定!

    拥有getter和setter - >私有属性

    我们在这里不这样做,那些是束缚语言的属性,我们都是用这种语言的成年人。

    虚拟构造函数

    再次,不是我们真正担心的事情,因为我们的构造函数比其他语言稍微聪明一些。 所以你可以定义一个__init__ ,它可以完成所有的初始化,如果你必须写一个工厂或子类。

    链接地址: http://www.djcxy.com/p/47653.html

    上一篇: JavaBean equivalent in Python

    下一篇: What are JavaBeans in plain English?