我是Python的新手,我很难理解如何在Python中执行以下操作(例如我将如何使用Java)
class Person{
private String name;
private Address address;
public Person(String xyz, Address a) {
this.name = xyz;
this.address = a;
}
....
}
答案 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