python - 构造函数中的另一个类

时间:2013-05-10 11:36:55

标签: java python class object constructor

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

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

 .... 
}

4 个答案:

答案 0 :(得分:4)

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

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

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

x = Person("poke", "My address")
x.phoneNumber = "012345679"

答案 1 :(得分: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()

答案 2 :(得分: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?
    # ...

答案 3 :(得分: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