0

我是 Python 新手,我很难理解如何在 Python 中执行以下操作(例如,我将如何在 Java 中执行)

class Person{ 
 private String name;
 private Address address; 
 public Person(String xyz, Address a) {
    this.name = xyz;
    this.address = a;
}

 .... 
}
4

4 回答 4

4

我不知道你为什么认为构造函数中有另一个类,但上面的 Java 在 Python 中可能看起来像这样:

class Person (object):
    def __init__ (self, xyz, a):
        self.name = xyz
        self.address = a

作为一种动态类型语言,Python 在编译代码时不需要知道类型是什么样的。相反,它动态创建对象,并在需要时添加属性。这不仅允许您在初始化程序中添加之前未声明的实例字段,还允许您在创建对象后添加内容:

x = Person("poke", "My address")
x.phoneNumber = "012345679"
于 2013-05-10T11:38:01.707 回答
2

就像提到的@poke 一样,您可以执行以下操作:

class Person (object):
    def __init__ (self, xyz, a):
       self.name = xyz
       self.address = a

如果你的意思是也有默认的构造函数,那么你可以有类似的东西:

class Person (object):
    def __init__ (self, xyz=None, a=None):
       self.name = xyz
       self.address = a

这将允许您在没有参数的情况下调用构造函数。

您可以将构造函数用作:

p = Person("yadda","bla")

或者

p = Person()
于 2013-05-10T11:39:31.870 回答
0

Python 并没有真正的private变量,在成员访问方面每个人都被视为成年人,但是无论如何你最终可能会实现getter / setter方法。请注意,_变量名称前缀只是“私有”变量的PEP-8命名约定,尽管它实际上并没有停止对它们的访问。

class Person(object): # subclass object for a new-style class
    def __init__(self, name, address):
        self._name = name
        self._address = address

    @property
    def name(self):
        return self._name

    @name.setter
    def name(self, name):
        self._name = name

    @property
    def address(self):
        return self._address

    @address.setter
    def address(self, address):
        self._address = address
于 2013-05-10T11:47:46.497 回答
0

像这样的东西:

class Person(object):
    def __init__(self, xyz, a):
        self.name = xyz
        self.address = a
    # ...

现在,当然你可以在构造函数中定义一个新类:

class Person(object):
    def __init__(self, xyz, a):
        self.name = xyz
        self.address = a
        class Glass(object):
            def __init__(self):
                self.glass_name = xyz
                #... whatever - but what purpose would this serve?
    # ...
于 2013-05-10T11:38:34.413 回答