Python面向对象基础:定义类、对象与属性
164 浏览量
更新于2024-08-28
收藏 119KB PDF 举报
海尔", 500, 800):
self.name = name
self.width = width
self.height = height
def __str__(self):
return f"这是一台{self.name}洗衣机,宽度{self.width}mm,高度{self.height}mm"
def __del__(self):
print(f"洗衣机{self.name}已被销毁")
# 创建对象
haier = Washer()
# 输出对象
print(haier)
# 销毁对象,调用__del__方法
del haier
对象的生命周期
对象从创建到销毁的过程称为生命周期。在Python中,对象的生命周期大致包括以下阶段:
1. 分配内存:通过`类名()`创建对象时,系统首先为对象分配内存空间。
2. 初始化:接着调用`__init__`方法,初始化对象的属性。
3. 使用:对象被创建后,可以通过其属性和方法进行操作。
4. 销毁:当对象不再被引用,且垃圾回收器判断其内存可回收时,会调用`__del__`方法,然后释放内存。
私有属性和私有方法
在Python中,以两个下划线`__`开头的属性或方法被视为私有。私有属性和方法仅在类内部可访问,不能从类的外部直接访问。例如:
```python
class SecretBox:
def __init__(self, secret):
self.__secret = secret
def reveal_secret(self):
print(self.__secret)
box = SecretBox("密码")
# box.__secret # 报错,私有属性不能直接访问
box.reveal_secret() # 可以通过方法访问
```
面向对象特性
1. 封装:隐藏实现细节,提供公共接口供外界交互。如上述`SecretBox`类中的`__secret`属性和`reveal_secret`方法。
2. 继承:子类继承父类的属性和方法,实现代码复用。子类可以覆盖父类的方法,实现特定功能。
3. 多态:不同对象对同一消息做出不同响应。例如,多个子类都实现了父类的某个方法,但具体实现不同。
4. 多继承:一个类可以同时继承多个父类,获得多个父类的属性和方法。
5. 新式类与经典类:Python 2.x中存在经典类和新式类的区别,新式类主要通过继承`object`类来实现,它支持更多的特性,如`__slots__`等。在Python 3.x中,默认所有类都是新式类。
6. 静态方法:不依赖于实例,而是与类本身相关的函数,使用`@staticmethod`装饰器定义。
7. 类方法:类方法是与类相关的函数,而不是实例,使用`@classmethod`装饰器定义,第一个参数通常是`cls`,代表类本身。
通过以上内容,我们可以了解到Python面向对象编程的基本概念和常用技巧,包括类的定义、对象的创建与操作、面向对象的特性以及如何利用这些特性来设计和实现复杂的程序结构。理解并熟练运用这些知识,将有助于编写出更高效、更易于维护的代码。
2021-05-24 上传
2017-12-22 上传
2018-05-12 上传
2022-08-18 上传
2024-10-22 上传
2018-08-27 上传
2024-01-31 上传
2021-09-29 上传
weixin_38713393
- 粉丝: 8
- 资源: 878
最新资源
- 参考资料-附件1-7-项目需求变更单-新增.zip
- zdesunbook,java源码阅读,oa系统源码java
- my_electron:基于Electron+Vue开发的桌面应用。(纯属兴趣,会定期更新完善功能)
- 如何确保您使用的是英特尔:registered:HAXM for Android仿真器
- 项目23
- TellkiAgent_OSXPhysicalDisk
- 参考资料-附件1-7-项目需求变更单.zip
- TriquiAPI:API Juego Triqui
- GUI,java获取网页源码,java在线教学
- biographical:个人网页简历源代码
- Fireworks New Tab Fun Theme-crx插件
- 基于STM32F10x固件库的 MDK5 工程模板
- java,java游戏源码,java游戏道具
- Punctuation
- cx-extractor-1.1:《基于行块分布函数的通用网页正文撤消》算法的Java实现;算法代码替换该算法随附的开源实现,不过接下可能发生之修改
- typednaclient-rxjs:TypingDna API的RxJS包装器