一 初识
类: 具有相似属性和功能的一类事物
对象: 类的具体表现
面向对象的优点:
- 面向对象编程是一类相似功能函数的集合,使代码更清晰,更合理化
- 面向对象要拥有上帝视角,类其实就是一个公共模板,对象就是从具体的模板实例化出来的
类的结构
class Human
mind = '有思想' # 第一部分:静态属性 属性 静态变量 静态字段
dic = {}
l1 = []
def __init__(self):
print(666)
def work(self): # 第二部分:动态方法 方法 函数
print('人类会工作')
class 是关键字,与def用法相同,定义一个类
Human 是此类的类名,类名使用驼峰体,首字母大写,私有类可用一个下划线开头.
类的结构大方向分为两部分:静态变量, 动态方法
二 从类名的角度研究类
1. 类名操作静态属性
第一种方法: 查看类中的所有内容: 类名.__dict__方式
print(Human._dict_)
只能查询,不能增删改
只用于查询全部内容(一般不用于单独属性查询)
第二种方法: 万能的点 . : 类名.
print(Human.mind)
通过万能的点可以增删改查类中的单个属性
2. 类名操作动态方法
类名.函数名()
Human.work()
下面方法可以用,但不建议用
类名._dict_['函数名']()
三 从对象的角度研究类
1. 什么是对象
对象是从类中出来的,只要是 类名() 就是一个实例化过程,产生一个对象
实例化一个对象发生三件事:
先执行object中的__new__方法,在内存中开辟一个对象空间
自动执行类中的__init__方法,并将这个对象空间(内存地址)传给了__init__方法的第一个位置参数self
在__init__方法中通过self给对象空间添加属性
class Human:
mind = '有思想'
language = '使用语言'
def __init__(self,name,sex,age,hobby):
self.n = name
self.s = sex
self.a = age
self.h = hobby
obj = Human('barry','男',18,'运动')
# self 和 obj 指向的是同一个内存地址同一个空间,下面就是通过self给这个对象空间封装四个属性。
2. 对象操作对象空间属性
1.对象查询对象中所有属性: 对象._dict_
print(obj._dict_)
2.对象操作对象中的单个属性: 万能的点. : 对象.属性
增 : obj.job = "IT"
删 : del obj.n
改 : obj.s = "女"
查 : print(obj.s)
3. 对象查看类中的属性: 对象.属性
print(obj.mind)
4. 对象操作类中的方法: 对象.函数()
obj.work()
类中的方法一般都是通过对象执行的(除类方法,静态方法外),并且对象执行这些方法都会自动将对象空间传给方法中的第一个参数self.
5. 一个类可以实例化多个对象
obj1= Human('小苍','女',20,'美女')
obj2= Human('小泽','女',18,'美腿')
print(obj1,obj2)
print(obj1.__dict__)
print(obj2.__dict__)
6. 类的空间问题
何处可以添加对象属性:
在类的__init__可以添加,在类的方法中可以添加,在类的外部也可以添加
何处可以添加类的属性:
在类的内部添加,在类的外部添加
7. 查询顺序:
对象空间与类空间有相同的名字, 对象. 先从对象空间查找.
对象.名字: 对象空间 > 类空间 > 父类空间
类名.名字: 类空间 > 父类空间