python,定义一个人类,定义一个公共属性和一个私有属性,调用类实例化对象时,在类外部如何访问私有属性 18
时间: 2024-11-29 12:36:07 浏览: 7
Python面向对象程序设计中类的定义、实例化、封装及私有变量/方法详解
在Python中,为了实现封装,有些属性默认是不可直接从类外部访问的,这些属性通常前缀为单下划线 `_`,被视为私有属性。然而,Python并没有严格的私有属性机制,只是约定俗成,开发者应尽量避免在类外部修改它们。但是,如果真的需要在类外部访问或修改私有属性,可以通过特殊的方法,比如`__get__`和`__set__`来间接实现。
以下是一个例子,定义一个人类类,包含一个公共属性`name`和一个私有属性`_age`:
```python
class Human:
def __init__(self, name):
self._age = 0 # 私有属性
@property # 创建一个getter方法来获取age属性
def age(self):
return self._age
@age.setter # 创建一个setter方法来设置age属性
def age(self, new_age):
if not isinstance(new_age, int) or new_age < 0:
raise ValueError("年龄必须是非负整数")
else:
self._age = new_age
# 实例化一个人类对象
person = Human("Tom")
# 在类外部尝试访问私有属性
try:
print(person._age) # 这将抛出AttributeError,因为._age是私有的
except AttributeError as e:
print(e)
# 正确的方式访问和设置age属性
person.age = 18
print(person.age) # 输出:18
```
尽管`_age`前面带了下划线,但我们仍然可以通过`age`属性来操作它,但不应随意地从外部直接改变其值。
阅读全文