一、什么是面向对象
'''
- 面向对象是一种编程思想
- 注意:要站在全局的角度去设计
核心是“对象”二字,对象是“特征与技能的结合体”,基于该编程思想编写程序,需要如上帝一样创造,抽象出一个个类
- 优点:
扩展性强
- 缺点:
编写程序的复杂度比面向过程更高
'''
二、如何产生对象
1、类和对象的关系
'''
现实生活中:先由一个个对象,总结出各对象之间的特征特点,抽象出一个类
编程过程中:先定义一个类,再由类实例化产生一个对象
- 对象指的是“特征与技能”的结合体
- 类指的是对象之间“特征与技能”的结合体
如 人类是一个抽象的类,而具体到某一个人,则就是人类实例化的对象。
'''
2、定义类的语法
class 类名:
pass
# 注意:类名一般用驼峰命名法命名
三、类的实例化
'''
类的实例化:调用类的过程称之为类的实例化,产生的对象也可以称之为类的一个实例
调用类产生对象的过程:
1、会产生一个空的对象的命名空间
2、会自动触发__init__,并且会将对象当作第一个参数传入
3、会将调用类括号内的参数一并传给__init__()
'''
四、查看类与对象的命名空间
# 类.__dict__
# 对象.__dict__
五、类或对象的属性操作
class People:
country = 'China'
def __init__(self, name, age, sex):
print(self.__dict__)
print(self)
self.name = name
self.age = age
self.sex = sex
print(self.__dict__)
# 注意: 看到self就应该知道是对象本身
def learn(self):
print('learning....')
p_obj = People('yyh',18,'male')
'''
类和对象都可以直接通过直接访问的方式来对属性进行 查、增、删、改 的操作
'''
People.country
p_obj.country
p_obj.name
六、类中数据属性(类中的变量):类中属性是给对象使用的,对象引用类中的属性,指向的都是类的内存地址
# p_obj1 = People('tank', 17, 'male')
# p_obj2 = People('jason', 71, 'female')
# p_obj3 = People('大饼', 72, 'female')
# print(p_obj1.country, id(p_obj1.country))
# print(p_obj2.country, id(p_obj2.country))
# print(p_obj3.country, id(p_obj3.country))
七、类中的方法
# 类中的方法是给对象使用的
# 不同的对象调用方法就会将方法绑定给不同的对象,并且会将对象当作第一个参数传入,称为类的绑定方法
# print(People.learn)
# print(p_obj1.learn) # bound method
# print(p_obj2.learn)
# print(p_obj3.learn)
八、对象属性的查找顺序
# 先从对象自己名称空间中查找,然后从类的名称空间中查找。
# 找不到则报错