类和对象的基本概念
类:抽象名词,代表一个集合,共性的事物
对象:具象的事物,单个个体
- 类和对象的关系
- 对象:代表一类事物的某一个个体
- 类:代表的是一大类事物
类中的内容,应该具有两个内容
- 表明事物的特征,是静态属性(变量)
- 表明事物功能或动作,是动态属性也称方法(函数)
定义类
- 类中的静态变量和方法名在程序加载过程中就已经执行完了,不需要等待调用
- 在整个类加载完之前,类名还不会出现在内存中
class Person:
# 定义属性
walk_way = '直立'
# 定义方法
# __init__方法是给对象封装属性
def __init__(self,name,age):
self.name = name
self.age = age
def eat(self):
print('eat')
obj = Person('bob',20) # 在内存实例化一个对象空间
print(obj.name) # bob
实例化过程:
- 在内存开辟一个对象空间,含有类对象指针的对象空间,该指针指向类
- 自动执行类中的
__init__
方法,并将对象空间传给self参数,其他参数需要传入 - 执行
__init__
方法,给对象空间封装相应的属性
查看类或对象的内置属性
print(Person.__dict__) # 查看类的内置属性
print(obj.__dict__) # 查看对象的内置属性
-
不可通过
__dict__
对类的内置属性进行增删改,但可以对对象的内置属性进行增删改obj.__dict__['eye'] = 'blue' # 增加'eye'属性 obj.__dict__['age'] = 18 # 修改age的值 del obj.__dict__['name'] # 删除name属性
还可以使用点操作符访问对象成员(obj.成员名称),用法和上面类似,如果对象或类中没有改成员名称,则会为对象添加该属性。
类和对象的成员分析
- 类和对象都可以存储成员,成员可以归类所有,也可以归对象所有
- 创建对象的时候,类中的成员不会放入对象中
- 对象存储成员时存储在当前对象中
- 对象访问一个成员时,如果对象中没有该成员,会尝试访问类中的同名成员;如果对象中有此成员,一定使用对象中的成员
- 不能通过对象对类中成员进行修改,对象只能查看类中的成员
组合:给一个类的对象封装一个属性,这个属性是另一个类的对象
- 作用:让类的对象与另一个类的对象产生关系,类与类之间产生关系
面向对象的三大特性
- 继承 详细参考此文章
- 多态
- 什么是多态:一个类表现出多种状态
- 通过继承实现
- 在python中,函数的参数不需要指定数据类型,所以不需要同继承的形式来统一一组类的类型
- 也就是说,所有对象都是object类型,处处都是多态
- 鸭子类型:
- 不是明确的通过继承实现的多态
- 如len():str, list, tuple, dict, set, range(n)可以使用len求长度
- print(): 对于print而言,所有对象都是鸭子类型
- 什么是多态:一个类表现出多种状态
- 封装
- 公开;
- 受保护的:
- 将对象成员进行一定级别的封装,然后在类或者子类中可以进行访问,在外部不行
- 封装方法: 在成员名称前添加一个下划线
- 私有的:
- 私有成员是最高级别的封装,只能在当前类或对象中访问,不会被子类继承
- 在成员前面添加两个下划线
- python的私有不是真私有,是一种改名策略,变成了
类名._类名__私有变量
类和对象的三种方法
-
实例方法
- 需要实例化对象才能使用的方法
-
静态方法
- 不需要实例化,通过类直接访问
- 不使用类或对象的命名空间,其实就是一个函数
-
类方法
- 不需要实例化
- 该方法涉及到操作静态属性(所有对象都拥有的属性)、类方法、静态方法
来源:CSDN
作者:kkklern
链接:https://blog.csdn.net/zll1130/article/details/104648050