2、设计程序实现封装的不同方式以及如何访问等,写明注释。 例如: (1)私有属性和方法 (2)公有属性和方法 (3)属性装饰器 (4)方法装饰器 python代码
时间: 2023-12-30 21:06:41 浏览: 120
下面是 Python 中实现封装的不同方式以及如何访问的示例代码,包括私有属性和方法、公有属性和方法、属性装饰器和方法装饰器。
```python
class Person:
def __init__(self, name, age):
self.__name = name # 私有属性
self.age = age # 公有属性
def __say_hello(self): # 私有方法
print(f"{self.__name} says hello!")
def say_age(self): # 公有方法
print(f"{self.__name} is {self.age} years old.")
self.__say_hello() # 在公有方法中调用私有方法
@property # 属性装饰器
def name(self):
return self.__name
@name.setter # 属性装饰器
def name(self, name):
self.__name = name
@classmethod # 方法装饰器
def from_birth_year(cls, name, birth_year):
age = 2022 - birth_year
return cls(name, age)
if __name__ == "__main__":
person = Person("Alice", 25)
person.say_age()
person.name = "Bob"
print(person.name)
person2 = Person.from_birth_year("Charlie", 2000)
print(person2.name)
print(person2.age)
```
输出结果:
```
Alice is 25 years old.
Alice says hello!
Bob
Charlie
22
```
在上面的示例代码中,我们定义了一个名为 `Person` 的类,它有两个属性:一个私有属性 `__name` 和一个公有属性 `age`,以及两个方法:一个私有方法 `__say_hello()` 和一个公有方法 `say_age()`。私有属性和方法可以通过在名称前加上两个下划线来实现,这样它们就不能从类的外部访问。公有属性和方法则可以直接从类的外部访问。
我们还使用了属性装饰器 `@property` 和 `@name.setter`,它们使得我们可以像访问普通属性一样访问私有属性 `__name`,并且可以通过 `name` 属性的 setter 方法来修改私有属性的值。
最后,我们使用了方法装饰器 `@classmethod`,它使得我们可以通过类方法 `from_birth_year()` 来创建一个 `Person` 对象,而不必实例化该类。
阅读全文