Python面向对象基础(一)

一、面向对象

1.1 理解
  1. 官方语言
    面向对象是一种抽象化的编程思想,很多编程语言中都有的一种思想。
  2. 生活举例

买电脑

  • 面向过程:查询电脑参数信息、货比三家比较机型、了解店铺活动售价打折信息、砍价、下单、收快递、开机验货、确认收货。
  • 面向对象:找秘书帮我买、收电脑。(是不是觉得很 easy 😀 ,当你敲代码时就会痛苦面具了😐)
  1. 总结
    面向对象将编程当成是一个事物,对外界来说,事物是直接使用,不管他内部的情况,而编程就是设置事物能够做什么事。
1.2 类和对象
  • 官方语言
    类是对一系列具有相同 特征 和 行为 的事物的统称,是一个抽象的概念,不是真实存在的事物。
    • 特征也叫属性,通俗的说就是静态的特点
    • 行为也叫方法,通俗的说就是动态的特点
  • 生活举例
    造大炮时设计师出的设计图,它就可以叫作成一个抽象的 类。
  1. 对象
  • 官方语言
    对象是类创建出来的真实存在的事物,这句话没啥毛病,通俗的说就是万物皆为对象。

    注意: 在开发中,先有类,再有对象。

二、定义类 和 创建对象

  1. 定义类
  • 语法格式
class 类名():
	代码
  • 举例
class Cat():
    def caatch_mouse(self):
        print('我是抓老鼠的小行家')
  1. 创建对象(又名实例)
  • 语法格式
对象名 = 类名()
  • 举例
class Cat():
    def caatch_mouse(self):
        print('我是抓老鼠的小行家')

# 创建对象
cat1 = Cat()
print(cat1)  # <__main__.Cat object at 0x000002397D090FD0>
# 对象调用实例方法
cat1.caatch_mouse()  # 我是抓老鼠的小行家
创建对象的过程也叫实例化对象
  1. 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 的解释成立。

三、对象属性

开头讲了属性即是特征可还记得😋,比如: 猫的身长,重量,毛色…

对象属性既可以在类外面添加和获取,也能在类里面添加和获取。

  1. 类外面添加和获取对象属性
  • 语法格式
对象名.属性名 =
  • 举例
class Cat():
    def caatch_mouse(self):
        print(self)

# 创建对象
cat1 = Cat()
cat1.name = '小白'  # 添加对象属性
print(f'小猫的名字叫:{cat1.name}')  # 小猫的名字叫:小白
  1. 类里面获取对象属性
  • 语法格式
self.属性名
  • 举例
class Cat():
    def cat_name(self):
        print(f'小猫的名字叫:{self.name}')

# 创建对象
cat1 = Cat()

# 添加对象实例属性
cat1.name = '小白'

# 对象调用实例方法
cat1.cat_name()  # 小猫的名字叫:小白

四、魔术方法

在 Python 中, 指的是具有特殊功能的函数。

4.1 init()

作用: 初始化对象。

  1. 不带参数的
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 雌性 美短
  1. 带参数的
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  #运行结果: 删除了对象

五、任务清单

  1. 创建 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()  # 登录
  1. 运用面向对象的方法完成买手机的程序
"""
不同的人根据不同需求购买不同手机
定义类
消费者类

属性
月收入

方法
购买:根据手机的价格、以及自己的收入,决定是否购买某款手机,符合要求输出“购
买”,不符合要求,输出“不购买“。是否购买的具体算法如下:
月收入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)  # 不购买
  1. 还记的以前写过的 猜拳 小游戏吗?现在将其改成 面向版本
"""
定义类
三个类:玩家、电脑和规则类
电脑类
属性: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
小王赢

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张浔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值