文章目录(PS:觉得不错请点赞收藏支持一下)
一、面向对象
1.1 理解
- 官方语言
面向对象是一种抽象化的编程思想,很多编程语言中都有的一种思想。 - 生活举例
买电脑
- 面向过程:查询电脑参数信息、货比三家比较机型、了解店铺活动售价打折信息、砍价、下单、收快递、开机验货、确认收货。
- 面向对象:找秘书帮我买、收电脑。(是不是觉得很 easy 😀 ,当你敲代码时就会痛苦面具了😐)
- 总结
面向对象将编程当成是一个事物,对外界来说,事物是直接使用,不管他内部的情况,而编程就是设置事物能够做什么事。
1.2 类和对象
- 类
- 官方语言
类是对一系列具有相同 特征 和 行为 的事物的统称,是一个抽象的概念,不是真实存在的事物。- 特征也叫属性,通俗的说就是静态的特点
- 行为也叫方法,通俗的说就是动态的特点
- 生活举例
造大炮时设计师出的设计图,它就可以叫作成一个抽象的 类。
- 对象
-
官方语言
对象是类创建出来的真实存在的事物,这句话没啥毛病,通俗的说就是万物皆为对象。注意: 在开发中,先有类,再有对象。
二、定义类 和 创建对象
- 定义类
- 语法格式
class 类名():
代码
- 举例
class Cat():
def caatch_mouse(self):
print('我是抓老鼠的小行家')
- 创建对象(又名实例)
- 语法格式
对象名 = 类名()
- 举例
class Cat():
def caatch_mouse(self):
print('我是抓老鼠的小行家')
# 创建对象
cat1 = Cat()
print(cat1) # <__main__.Cat object at 0x000002397D090FD0>
# 对象调用实例方法
cat1.caatch_mouse() # 我是抓老鼠的小行家
创建对象的过程也叫实例化对象
- self
self 指的是调用该函数的对象。
class Cat():
def caatch_mouse(self):
print(self)
# 创建对象
cat1 = Cat()
print(cat1) # <__main__.Cat object at 0x000002397D090FD0>
# 对象调用实例方法
cat1.caatch_mouse() # <__main__.Cat object at 0x00000178EFBE0FD0>
打印输出对象和 self 得到的结果一致的,说明对 self 的解释成立。
三、对象属性
开头讲了属性即是特征可还记得😋,比如: 猫的身长,重量,毛色…
对象属性既可以在类外面添加和获取,也能在类里面添加和获取。
- 类外面添加和获取对象属性
- 语法格式
对象名.属性名 = 值
- 举例
class Cat():
def caatch_mouse(self):
print(self)
# 创建对象
cat1 = Cat()
cat1.name = '小白' # 添加对象属性
print(f'小猫的名字叫:{cat1.name}') # 小猫的名字叫:小白
- 类里面获取对象属性
- 语法格式
self.属性名
- 举例
class Cat():
def cat_name(self):
print(f'小猫的名字叫:{self.name}')
# 创建对象
cat1 = Cat()
# 添加对象实例属性
cat1.name = '小白'
# 对象调用实例方法
cat1.cat_name() # 小猫的名字叫:小白
四、魔术方法
在 Python 中, 指的是具有特殊功能的函数。
4.1 init()
作用: 初始化对象。
- 不带参数的
class Cat(object):
"""
1. __init__ 叫做魔术方法,此方法不需要通过对象调用,而是在创建对象时自动调用
2. __init__ 方法存在于每个类中,下面是对此方法重写
3. 创建对象时的 Cat() 代码其实就是对 __init__ 方法的调用
4. __init__ 方法可以让我们为类添加属性,而且通过参数,可以根据 Cat() 类,创建不同的对象
5. self 指的不是类,而是当前创建的对象
"""
def __init__(self):
self.name = 'Tome'
self.gender = '雌性'
self.varieties = '美短'
# 创建对象
cat1 = Cat()
print(cat1.name,cat1.gender,cat1.varieties) # Tome 雌性 美短
- 带参数的
class Cat(object):
def __init__(self,name,gender,varieties):
self.name = name
self.gender = gender
self.varieties = varieties
print(f'name:{name},gender:{gender},varieties:{varieties}')
cat1 = Cat('Tome','雌性','美短') # name:Tome,gender:雌性,varieties:美短
4.2 str()
class Cat(object):
"""
没有 __str__ 魔术方法时,当使用 print 输出对象时调用
默认情况下,会输出对象的内存地址
可以重写此方法,方法中必须有返回值,返回值的内容是 print 对象时输出的内容
"""
def __init__(self, name, gender, varieties):
self.name = name
self.gender = gender
self.varieties = varieties
def __str__(self):
return f'猫咪的姓名:{self.name},性别:{self.gender},品种:{self.varieties}'
cat1 = Cat('Tome','雌性','美短')
print(cat1) # 猫咪的姓名:Tome,性别:雌性,品种:美短
4.3 del()
作用:删除对象时自动执行的魔术方法
class Cat(object):
def __del__(self):
print('删除了对象')
cat1 = Cat()
del cat1 #运行结果: 删除了对象
五、任务清单
- 创建 Computer 类
"""
1) 类的成员
属性:
品牌
硬盘类型
操作系统
内存大小
CPU
显卡
屏幕大小
2) 方法:
开机
关机
注销
登录
"""
class Computer():
def __init__(self,brand,HddType,os,RAM,CPU,GPU,size):
self.brand = brand
self.HddType = HddType
self.os = os
self.RAM = RAM
self.CPU = CPU
self.GPU = GPU
self.size = size
def PowerOn(self):
print('开机')
def ShutDown(self):
print('关机')
def LogOff(self):
print('注销')
def SignIn(self):
print('登录')
def __str__(self):
return f'品牌:{self.brand},硬盘类型:{self.HddType},操作系统:{self.os},内存大小:{self.RAM},CPU:{self.CPU},显卡:{self.GPU},屏幕大小:{self.size}'
computer1 = Computer('苹果','固态','ios','1T','Apple M1','Intel HD 5300','13英寸')
print(computer1) # 品牌:苹果,硬盘类型:固态,操作系统:ios,内存大小:1T,CPU:Apple M1,显卡:Intel HD 5300,屏幕大小:13英寸
computer1.PowerOn() # 开机
computer1.ShutDown() # 关机
computer1.LogOff() # 注销
computer1.SignIn() # 登录
- 运用面向对象的方法完成买手机的程序
"""
不同的人根据不同需求购买不同手机
定义类
消费者类
属性
月收入
方法
购买:根据手机的价格、以及自己的收入,决定是否购买某款手机,符合要求输出“购
买”,不符合要求,输出“不购买“。是否购买的具体算法如下:
月收入10000以上,购买8000以内的手机
月收入6000-100000,购买4000-8000的手机
月收入3000-6000,购买2000-4000的手机
月收入4000一下,购买2000元一下的手机
手机类
属性:价格
实现购买手机过程
创建4个消费者,收入处于不同档次
创建4部手机,价格处于不同档次
将不同的手机对象传递给不同的消费者对象的”购买“方法,进行测试
"""
class Phone():
def __init__(self,price):
self.price = price
class user():
def __init__(self,income):
self.income = income
def buy(self,phone):
if self.income > 10000 and phone < 8000:
print('购买')
elif 6000 < self.income <= 10000 and 4000 < phone <=8000:
print('购买')
elif 3000 < self.income <= 6000 and 2000 <= phone <= 4000:
print('购买')
elif self.income < 4000 and phone < 2000:
print('购买')
else:
print('不购买')
u1 = user(20000)
u2 = user(5000)
p1 = Phone(8000)
p2 = Phone(5000)
u1.buy(p1.price) # 不购买
u1.buy(p2.price) # 购买
u2.buy(p1.price) # 不购买
u2.buy(p2.price) # 不购买
- 还记的以前写过的 猜拳 小游戏吗?现在将其改成 面向版本
"""
定义类
三个类:玩家、电脑和规则类
电脑类
属性:name,值永远为”电脑“
方法:出拳:包袱、锤子和剪刀随机出一个
玩家类
属性:name,玩家的名字,这个由用户通过控制台输入
方法:出拳:包袱、锤子和剪刀,由用户输入
规则类
方法:评判,作用是根据玩家和电脑出拳的结果判断输赢并将此结果输出
"""
import random
class computer():
def __init__(self):
self.name = '电脑'
def pk(self):
return random.randint(1, 3)
class player():
def __init__(self,name):
self.name = name
def pk(self,skill):
return skill
class rule():
def judge(self,res_computer,res_player):
print(f'玩家出的是{res_player},电脑出的是{res_computer}')
if (res_computer == 1 and res_player == 3) or (res_computer == 2 and res_player == 1) or (res_computer == 3 and res_player == 2):
print(f'{computer().name}赢')
elif res_computer == res_player:
print('平局')
else:
print(f'{p1.name}赢')
while True:
name = input('输入玩家姓名:')
skill = int(input("""
玩家请出拳:
1:石头
2:包袱
3:剪刀
"""))
p1 = player(name)
res1 = p1.pk(skill)
c1 = computer()
res2 = c1.pk()
r1 = rule()
r1.judge(res2, res1)
# 运行结果:
输入玩家姓名:张三
玩家请出拳:
1:石头
2:包袱
3:剪刀
2
玩家出的是2,电脑出的是3
电脑赢
输入玩家姓名:小明
玩家请出拳:
1:石头
2:包袱
3:剪刀
3
玩家出的是3,电脑出的是3
平局
输入玩家姓名:小王
玩家请出拳:
1:石头
2:包袱
3:剪刀
2
玩家出的是2,电脑出的是1
小王赢