- Python 教程
- Python 教程
- Python - 概述
- Python - 历史
- Python - 特性
- Python 与 C++
- Python - Hello World 程序
- Python - 应用领域
- Python 解释器及其模式
- Python - 环境设置
- Python - 虚拟环境
- Python - 基本语法
- Python - 变量
- Python - 数据类型
- Python - 类型转换
- Python - Unicode 系统
- Python - 文字
- Python - 运算符
- Python - 算术运算符
- Python - 比较运算符
- Python - 赋值运算符
- Python - 逻辑运算符
- Python - 按位运算符
- Python - 成员资格运算符
- Python - 身份运算符
- Python - 运算符优先级
- Python - 注释
- Python - 用户输入
- Python - 数字
- Python - 布尔值
- Python 控制语句
- Python - 控制流
- Python - 决策
- Python - if 语句
- Python - if-else 语句
- Python - 嵌套 if 语句
- Python - Match-Case 语句
- Python - 循环
- Python - For 循环
- Python for-else 循环
- Python - While 循环
- Python - break 语句
- Python - Continue 语句
- Python - pass 语句
- Python - 嵌套循环
- Python 函数和模块
- Python - 函数
- Python - 默认参数
- Python - 关键字参数
- Python - 仅关键字参数
- Python - 位置参数
- Python - 仅位置参数
- Python - 任意或可变长度参数
- Python - 变量范围
- Python - 函数注释
- Python - 模块
- Python - 内置函数
- Python 字符串
- Python - 字符串
- Python - 切片字符串
- Python - 修改字符串
- Python - 字符串连接
- Python - 字符串格式化
- Python - 转义字符
- Python - 字符串方法
- Python - 字符串练习
- Python 列表
- Python - 列表
- Python - 访问列表项
- Python - 更改列表项
- Python - 添加列表项
- Python - 删除列表项
- Python - 循环列表
- Python - 列表推导式
- Python - 排序列表
- Python - 复制列表
- Python - 联接列表
- Python - 列表方法
- Python - 列表练习
- Python 元组
- Python - 元组(Tuple )
- Python - 访问元组项
- Python - 更新元组
- Python - 解压缩元组项
- Python - 循环元组
- Python - 联接元组
- Python - 元组方法
- Python - 元组练习
- Python 集
- Python - 集(sets)
- Python - 访问 Set Items
- Python - 添加 Set Items
- Python - 删除 Set Items
- Python - 循环 Set Items
- Python - 联接 Sets
- Python - 复制 Set
- Python - Set 运算符
- Python - Set 方法
- Python - Set 的练习
- Python 字典
- Python - 字典
- Python - 访问字典项
- Python - 更改字典项
- Python - 添加字典项
- Python - 删除字典项
- Python - 字典视图对象
- Python - 循环字典
- Python - 复制字典
- Python - 嵌套字典
- Python - 字典方法
- Python - 字典练习
- Python 数组
- Python - 数组
- Python - 访问数组项
- Python - 添加数组项
- Python - 删除数组项
- Python - 循环数组
- Python - 复制数组
- Python - 反向数组
- Python - 对数组进行排序
- Python - 连接数组
- Python - 数组方法
- Python - 数组练习
- Python 文件处理
- Python - 文件处理
- Python - 写入文件
- Python - 读取文件
- Python - 重命名和删除文件
- Python - 目录
- Python - 文件方法
- Python OS 文件/目录方法
- Python - os.path 方法
- 面向对象编程
- Python - OOP 概念
- Python - 类和对象
- Python - 类属性
- Python - 类方法
- Python - 静态方法
- Python - 构造函数
- Python - 访问修饰符
- Python - 继承
- Python - 多态性
- Python - 方法覆盖
- Python - 方法重载
- Python - 动态绑定
- Python - 动态类型
- Python - 抽象
- Python - 封装
- Python - 接口
- Python - 软件包
- Python - 内部类
- Python - 匿名类和对象
- Python - 单例类
- Python - 包装类
- Python - 枚举
- Python - 反射
- Python 错误和异常
- Python - 语法错误
- Python - 异常处理
- Python - try-except 块
- Python - try-finally 块
- Python - 引发异常
- Python - 异常链接
- Python - 嵌套 try 块
- Python - 用户定义的异常
- Python - 日志记录
- Python - 断言
- Python - 内置异常
- Python 多线程
- Python - 多线程
- Python - 线程生命周期
- Python - 创建线程
- Python - 启动线程
- Python - 联接线程
- Python - 命名线程
- Python - 线程调度
- Python - 线程池
- Python - 主线程
- Python - 线程优先级
- Python - 守护程序线程
- Python - 同步线程
- Python 同步
- Python - 线程间通信
- Python - 线程死锁
- Python - 中断线程
- Python 网络
- Python - 网络编程
- Python - 套接字编程
- Python - URL 处理
- Python - 泛型
- Python 杂项
- Python - 日期和时间
- Python - math 模块
- Python - 迭代器
- Python - 生成器
- Python - 闭包(closures)
- Python - 装饰器( Decorators)
- Python - 递归
- Python - 正则表达式
- Python - PIP
- Python - 数据库访问
- Python - 弱引用
- Python - 序列化
- Python - 模板
- Python - 输出格式
- Python - 性能测量
- Python - 数据压缩
- Python - CGI 编程
- Python - XML 处理
- Python - GUI 编程
- Python - 命令行参数
- Python - 文档字符串
- Python - JSON
- Python - 发送电子邮件
- Python - 更多扩展
- Python - 工具/实用程序
- Python - 图形用户界面
- Python 高级概念
- Python - 抽象基类
- Python - 自定义异常
- Python - 高阶函数
- Python - 对象内部
- Python - 内存管理
- Python - 元类
- Python - 使用 Metaclasses 进行元编程
- Python - 模拟和存根
- Python - 猴子修补
- Python - 信号处理
- Python - 类型提示
- Python - 自动化教程
- Python - 人性化软件包
- Python - 上下文管理器
- Python - 协程
- Python - 描述符
- Python - 诊断和修复内存泄漏
- Python - 不可变数据结构
Python - 类和对象
Python 是一种面向对象的编程语言,这意味着它基于 OOP 概念的原理。Python 程序中使用的实体是一个或另一个类的对象。例如,程序的数字、字符串、列表、字典和其他类似实体是相应内置类的对象。
在 Python 中,名为 Object 的类是所有类(内置类和用户定义类)的基类或父类。
什么是 Python 中的类?
在 Python 中,类是用户定义的实体(数据类型),用于定义对象可以包含的数据类型以及它可以执行的操作。它用作创建对象的模板。例如,如果我们想在 Python 程序中为 Smartphone 定义一个类,我们可以使用 RAM、ROM、屏幕大小等数据类型以及呼叫和消息等操作。
在 Python 中创建类
class 关键字用于在 Python 中创建新类。类的名称紧跟在关键字 class 后面,后跟一个冒号,如下所示 -
class ClassName:
'Optional class documentation string'
class_suite
- 该类有一个文档字符串,可以通过 ClassName.__doc__ 访问该字符串。
- class_suite 由定义类成员、数据属性和函数的所有组件语句组成。
以下是一个简单的 Python 类的示例 -
class Employee:
'Common base class for all employees'
empCount = 0
def __init__(self, name, salary):
self.name = name
self.salary = salary
Employee.empCount += 1
def displayCount(self):
print "Total Employee %d" % Employee.empCount
def displayEmployee(self):
print "Name : ", self.name, ", Salary: ", self.salary
- 变量 empCount 是一个类变量,其值在 this 类的所有实例之间共享。这可以作为 Employee.empCount 从类内部或类外部访问。
- 第一个方法 __init__() 是一个特殊方法,它称为类构造函数或初始化方法,Python 在创建此类的新实例时调用该方法。
- 您可以像普通函数一样声明其他类方法,但每个方法的第一个参数是 self。Python 将 self 参数添加到列表中;在调用方法时,不需要包含它。
什么是对象?
对象被引用为给定 Python 类的实例。每个对象都有自己的属性和方法,这些属性和方法由其类定义。
创建类时,它仅描述 obejcts 的结构。当从类实例化对象时,将分配内存。
在上图中,Vehicle 是类名,Car、Bus 和 SUV 是其对象。
在 Python 中创建类的对象
要创建类的实例,请使用类名调用类,并传入其__init__方法接受的任何参数。
# This would create first object of Employee class
emp1 = Employee("Zara", 2000)
# This would create second object of Employee class
emp2 = Employee("Manni", 5000)
在 Python 中访问对象的属性
您可以使用 object 的点运算符来访问对象的属性。类变量将使用类名进行访问,如下所示 -
emp1.displayEmployee()
emp2.displayEmployee()
print ("Total Employee %d" % Employee.empCount)
现在,将所有概念放在一起 -
class Employee:
"Common base class for all employees"
empCount = 0
def __init__(self, name, salary):
self.name = name
self.salary = salary
Employee.empCount += 1
def displayCount(self):
print ("Total Employee %d" % Employee.empCount)
def displayEmployee(self):
print ("Name : ", self.name, ", Salary: ", self.salary)
# This would create first object of Employee class
emp1 = Employee("Zara", 2000)
# This would create second object of Employee class
emp2 = Employee("Manni", 5000)
emp1.displayEmployee()
emp2.displayEmployee()
print ("Total Employee %d" % Employee.empCount)
执行上述代码时,它会产生以下结果 -
Name : Manni , Salary: 5000
Total Employee 2
您可以随时添加、删除或修改类和对象的属性 -
# Add an 'age' attribute
emp1.age = 7
# Modify 'age' attribute
emp1.age = 8
# Delete 'age' attribute
del emp1.age
除了使用 normal 语句访问属性外,您还可以使用以下函数 -
- getattr(obj, name[, default]) − 来访问 Object 的属性。
- hasattr(obj,name) − 来检查属性是否存在。
- setattr(obj,name,value) − 设置属性。如果 attribute 不存在,则将创建它。
- delattr(obj, name) − 删除属性。
# Returns true if 'age' attribute exists
hasattr(emp1, 'age')
# Returns value of 'age' attribute
getattr(emp1, 'age')
# Set attribute 'age' at 8
setattr(emp1, 'age', 8)
# Delete attribute 'age'
delattr(empl, 'age')
Python 中的内置类属性
每个 Python 类都遵循内置属性,并且可以像任何其他属性一样使用点运算符访问它们 -
属性 | 描述 |
---|---|
__dict__ | 包含类的命名空间的 Dictionary。 |
__doc__ | 类 documentation 字符串或 none(如果未定义)。 |
__name__ | 类名 |
__module__ | 定义类的模块名称。此属性在交互模式下为 “__main__”。 |
__bases__ | 一个可能为空的 Tuples,其中包含基类,按它们在基类列表中出现的顺序。 |
例
对于上面的 Employee 类,让我们尝试访问其属性 -
class Employee:
'Common base class for all employees'
empCount = 0
def __init__(self, name, salary):
self.name = name
self.salary = salary
Employee.empCount += 1
def displayCount(self):
print ("Total Employee %d" % Employee.empCount)
def displayEmployee(self):
print ("Name : ", self.name, ", Salary: ", self.salary)
print ("Employee.__doc__:", Employee.__doc__)
print ("Employee.__name__:", Employee.__name__)
print ("Employee.__module__:", Employee.__module__)
print ("Employee.__bases__:", Employee.__bases__)
print ("Employee.__dict__:", Employee.__dict__)
执行上述代码时,它会产生以下结果 -
Employee.__name__: Employee
Employee.__module__: __main__
Employee.__bases__: ()
Employee.__dict__: {'__module__': '__main__', 'displayCount':
<function displayCount at 0xb7c84994>, 'empCount': 2,
'displayEmployee': <function displayEmployee at 0xb7c8441c>,
'__doc__': 'Common base class for all employees',
'__init__': <function __init__ at 0xb7c846bc>}
内置 Python 数据类型类
如前所述,Python 遵循面向对象的编程范式。字符串、列表和数据类型等实体属于一个或另一个内置类。
如果我们想查看哪种数据类型属于哪个内置类,可以使用 Python type() 函数。此函数接受数据类型并返回其相应的类。
例下面的示例演示了如何检查给定数据类型的内置类。
num = 20
print (type(num))
num1 = 55.50
print (type(num1))
s = "qikepu"
print (type(s))
dct = {'a':1,'b':2,'c':3}
print (type(dct))
def SayHello():
print ("Hello World")
return
print (type(SayHello))
当您执行此代码时,它将显示 Python 数据类型的相应类 -
<class 'float'>
<class 'str'>
<class 'dict'>
<class 'function'>
Python 中的垃圾回收(销毁对象)
Python 会自动删除不需要的对象(内置类型或类实例)以释放内存空间。Python 定期回收不再使用的内存块的过程称为垃圾回收。
Python 的垃圾回收器在程序执行期间运行,并在对象的引用计数达到零时触发。对象的引用计数会随着指向对象的别名数量的变化而变化。
当为对象分配新名称或将其放置在容器(列表、元组或字典)中时,对象的引用计数会增加。当使用 del 删除对象、重新分配其引用或其引用超出范围时,该对象的引用计数会减少。当对象的引用计数达到零时,Python 会自动收集它。
# Create object <40>
a = 40
# Increase ref. count of <40>
b = a
# Increase ref. count of <40>
c = [b]
# Decrease ref. count of <40>
del a
# Decrease ref. count of <40>
b = 100
# Decrease ref. count of <40>
c[0] = -1
您通常不会注意到垃圾回收器何时销毁未使用的实例并回收其空间。但是类可以实现特殊方法 __del__(),称为析构函数,该方法在实例即将销毁时调用。此方法可用于清理实例使用的任何非内存资源。
例__del__() 析构函数打印即将销毁的实例的类名,如下面的代码块所示 -
class Point:
def __init__( self, x=0, y=0):
self.x = x
self.y = y
def __del__(self):
class_name = self.__class__.__name__
print (class_name, "destroyed")
pt1 = Point()
pt2 = pt1
pt3 = pt1
# prints the ids of the obejcts
print (id(pt1), id(pt2), id(pt3))
del pt1
del pt2
del pt3
在执行时,上述代码将产生以下结果 -
Point destroyed
Python 中的数据隐藏
对象的属性在类定义之外可能可见,也可能不可见。您需要使用双下划线前缀命名属性,然后这些属性不会直接对外部人员可见。
例
class JustCounter:
__secretCount = 0
def count(self):
self.__secretCount += 1
print self.__secretCount
counter = JustCounter()
counter.count()
counter.count()
print counter.__secretCount
执行上述代码时,它会产生以下结果 -
2
ERROR!
Traceback (most recent call last):
File <main.py>", line 11, in <module>
AttributeError: 'JustCounter' object has no attribute '__secretCount'
Python 通过在内部更改名称以包含类名来保护这些成员。您可以访问 object._className__attrName 等属性。如果您将最后一行替换为以下内容,那么它对您有用 -
print(counter._JustCounter__secretCount)
执行上述代码时,它会产生以下结果 -
2
2