class Person(): def __init__(self,name): self.name=name 如何将上述的name改成私有属性。
时间: 2024-02-15 11:05:19 浏览: 27
将`name`变量前面加上两个下划线`__`即可将其变成私有属性。修改后的代码如下:
```python
class Person():
def __init__(self, name):
self.__name = name
```
这样`name`属性就变成了私有属性,外部无法直接访问。如果需要访问`name`属性,可以通过类的公有方法来访问,例如:
```python
class Person():
def __init__(self, name):
self.__name = name
def get_name(self):
return self.__name
def set_name(self, name):
self.__name = name
```
在上面的代码中,我们添加了`get_name`和`set_name`两个公有方法来获取和设置`name`属性的值。这样就可以通过调用这两个方法来访问`name`属性了。例如,要获取`name`属性的值,可以调用`get_name`方法:
```python
p = Person("Tom")
name = p.get_name()
print(name) # 输出 "Tom"
```
相关问题
class Person: def __init__(self, name, age=0): self._name = name self._age = age @property def name(self): return self._name @name.setter def name(self, value): self._name = value @property def age(self): return self._age @age.setter def age(self, value): self._age = value
抱歉,由于排版原因,我之前的代码示例可能没有显示完整。以下是完整的代码示例:
```python
class Person:
def __init__(self, name, age=0):
self._name = name
self._age = age
@property
def name(self):
return self._name
@name.setter
def name(self, value):
self._name = value
@property
def age(self):
return self._age
@age.setter
def age(self, value):
self._age = value
```
请问还有其他问题吗?
from objprint import op class Animal: def __init__(self,age): self.age = age class Person(Animal): def __init__(self, age,name): super().__init__(age) self.name = name class Male(Person): def __init__(self, age, name): super(Person,self).__init__(age) self.gender = "male" m = Male(32,"Peter") super(Male,m).__init__(32,"Peter") op(m)
这段代码也存在语法错误。在Male类中,应该使用super().__init__(age, name)来调用父类Person的构造函数,而不是使用super(Person, self).__init__(age)。同时,在Male类中,应该先调用父类的构造函数,然后再添加gender属性,否则会出现AttributeError异常。在修正这些问题之后,代码应该如下所示:
```python
from objprint import op
class Animal:
def __init__(self, age):
self.age = age
class Person(Animal):
def __init__(self, age, name):
super().__init__(age)
self.name = name
class Male(Person):
def __init__(self, age, name):
super().__init__(age, name)
self.gender = "male"
m = Male(32, "Peter")
super(Male, m).__init__(32, "Peter")
op(m)
```
这样,代码就不会出现语法错误,并且能够正常运行。注意,这里在最后一行代码中使用了op(m)来输出对象m的属性和方法,需要确保已经安装了objprint模块才能够使用op函数。