面向对象的概念
编程中实现需求,两种开发的模式:
- 面向过程:在写代码的时候,一步一步的从头到尾去执行,每一个步骤在实现的时候,都是亲力亲为。关注点在过程。
- 面向对象:实现某一个功能的时候,执行某个操作的时候,将事务的共性提炼出来,对象,让对象去实现想要的操作,
- 大象、鲨鱼---动物(走)
- 衣柜、冰箱---容器(打开门、关闭
面向对象的三大特征
- 封装:就是将具体共同特征的一类事物,封装成一个类,类中,封装一些,共同特征(属性和方法)
- 联想、戴尔、华硕、苹果
- 性能、CPU、内存、显卡、颜色、尺寸、价格
- 将上述的电脑====> 电脑类
- 数据(属性--特点):
- 行为(方法--能做什么事情)
面向对象中有两个很重要的概念就是 类 和对象
类:一类事物的统称,泛指,在程序中想要去创建一个类,使用关键字 class来进行定义
对象: 对象是通过类创建的,实实在在存在的事物。
类组成: 类名、属性(用于去描述这一类事物 名词)、方法(行为,事物做什么事情、动词)
类如何去抽取
归纳的时候,类就是一类事物的统称
人类--- (类名)
属性--- 智商 身高,体重,年龄
方法--- 走 思考 说话 吃 唱 跳 rap
01-类的定义
# 类在定义的时候 使用 class 关键字来定义
# 类名要符合标识符的命名规则,最好使用大驼峰的命名方式
# 定义一个人类
class People():
# 定义属性和方法
# 在类中定义方法,和前面学的函数是基本一模一样的,函数中学到的知识点在方法中是通用的
# 其实方法的本质就是函数
def eat(self):
print('正在吃饭....')
def sing(self):
print("正在唱歌....")
# 如何去创建对象? 对象名 = 类名()
xiaoming = People()
# 如何去使用类中的方法? 对象名.方法名()
xiaoming.eat()
print(id(xiaoming))
# 根据这个类,张三对象
zs = People()
zs.eat()
print(id(zs))
print('-'* 50)
if xiaoming is zs: # 在Python中判断两个值是否相等 使用 == ,判断两个变量(对象)的引用是否相同使用is
print("一样的")
02-补充-类的定义
# 1. class 类名(object):
class People(object):
pass
# 2. class 类名():
class People1():
pass
# 3. class 类名:
class People2:
pass
"""
括号里面写的内容,是另外一个类的名字(继承)
在Python3中,默认的情况下,所有的类都有一个共同的父类 --object 这种类叫做新式类。
了解: 在Python2中,默认是旧式类,如果在定义类的时候,加上了 object ,那也就表示新式类。
"""
03-添加和获取属性
# 定义一个类
class People(object):
# 类中的方法
def play(self):
print('在玩耍....')
# 通过对象.方法名()
# 根据类创建一个对象 zs
zs = People()
# 要给张三添加属性 姓名 年龄 性别
# 在类外部给对象添加属性 使用的语法: 对象名.属性名 = 值
zs.name = "张三" # 给zs对象添加了一个属性 name,属性的值是 张三
zs.age = 18
zs.gender = "男"
# 获取对象的属性的值 。 使用 对象名.属性名
print(f"学生的名字是:{zs.name}, 年龄是:{zs.age}, 性别: {zs.gender}")
zs.play()
04-类的内部获取属性
class People(object):
def play(self):
# 在类的内部想要去获取对象的属性的值, self.属性名
print(f"{self.name} 在快乐的玩耍....")
# 创建一个对象
zs = People()
# 添加一个name属性
zs.name = "张三"
zs.age = 19
# 调用 play方法, 在调用该方法的时候,输出 : 张三 在快乐的玩耍
zs.play()
# 创建对象
xh = People()
# 小红添加一个属性
xh.name = "小红"
xh.age = 18
xh.play()
05-类和对象巩固
class Student(object):
def study(self):
print(f'{self.name} 正在学习....')
def play(self):
# 在类中的方法中 去调用另外的一个方法
self.study()
print(f'{self.name} 学习完了,可以去快乐的玩耍了....')
# 创建一个对象
zs = Student()
# 给对象添加一个属性 name
zs.name = "张三"
# 调用 play方法
# zs.study()
zs.play()
06-魔法方法init
class Student(object):
# 在创建对象的时候,会自动调用
def __init__(self, name, age):
"""
init 方法又叫做 初始化方法,我们可以给对象添加一些默认的属性
"""
print('init方法自动执行了...')
# 添加一个默认的属性,班级
self.classes = "Python+大数据57期"
self.name = name
self.age = age
# 创建了一个对象
# xm = Student("小明", 18)
xm = Student(name="小明", age=18)
# 获取一下 xm 是哪一个班级的学生?
print(xm.classes, xm.name, xm.age)
07-魔法方法str
class Student(object):
def __init__(self, name, age):
self.name = name
self.age = age
# 使用 print(对象) 定义 str这个魔法方法,str这个 方法中返回的内容是什么,那么输出的内容就是什么。
def __str__(self):
# 注意点: 这个方法必须要有return,而且返回值的类型必须是 字符串类型
print('ajdsijdaisjdajsidjasidjasi')
return f"我叫:{self.name}, 年龄是:{self.age}"
# return "111111"
# 创建对象的时候,可以直接给对象添加name和age属性
zs = Student("张三", 18)
# 直接输出对象,那么打印的就是这个对象在内存中的引用地址
print(zs) # 这一行 自动调用了 str 方法
print(zs.name, zs.age)
# 使用类型转换,将对象转换为字符串的时候, str(对象名)
print("------>", str(zs))
lisi = Student("李四", 20)
print(lisi)
08-str
# 定义一个Dog类, 对象 有属性,name, clolor, 创建两个对象,在输出这两个对象的时候,直接输出两个对象的 名字和颜色
class Dog(object):
def __init__(self, name, color):
"""
在初始化的时候,给对象添加两个属性
:param name: 名字
:param color: 颜色
"""
self.name = name
self.color = color
def __str__(self):
return f"名字:{self.name}, 颜色:{self.color}"
dh = Dog("大黄", "黄色")
erha = Dog("二哈", "黑白配")
print(dh)
print(erha)
print(str(dh))
print(str(erha))
09-魔法方法del
class Student(object):
def __del__(self):
"""
1. 当对象的引用计数为0的时候
2. 程序执行结束的时候
"""
print('我是del方法,我执行了........')
s1 = Student()
# s1对象,有两个引用计数 s1 和 s2
s2 = s1
del s1
print('对象进行第一次删除.....')
del s2
print('对象进行第二次删除.....')
print('程序马上执行结束。。。。。')