【大数据 / Python / KEN】Python 类(12)

首次发布时间:2020/8/4
最后修改时间:2020/8/4
本系列文章基于 python3 版本

摘要
  • 面向对象
  • 类的构成
  • 定义一个类
  • 创建对象
  • self
  • 初始化方法

面向对象


  • 说到类,必须要提到面向对象编程

  • 在函数之前的学习都是面向过程的

    • 这一步做什么,下一步做什么,顺序执行,一直到执行结束
  • 假设想要喝鱼汤,以面向过程来说就是:

    • 买鱼
    • 杀鱼
    • 把鱼煎一下
    • 放调料
    • 放水
    • 开火烧开
    • 喝鱼汤
  • 面向对象的方式就是:

  • 找个饭店

  • 付钱

  • 喝鱼汤

小结
  • 面向过程:根据业务逻辑,从上到下编写代码

  • 面向对象:将数据与函数绑定到一起,封装成类,用的时候创建相应的对象,可以减少重复代码的编写

  • 不论是面向过程还是面向对象,都是一种解决问题的思路

    • 就像常说 c++ 是支持面向对象的语言,但是你当然也可以用 c++ 写出面向过程的代码
    • 这取决于你的思路
  • 面向对象中有 2 个非常重要的概念:对象

    • 对象面向对象编程的核心
    • 在使用对象的过程中,为了将具有共同特征行为的一组对象抽象定义,提出了另外一个新的概念——


  • 都是抽象
  • 如果要问什么是狗时,那肯定会说:
    • 有四肢
    • 有两个耳朵
    • 有尾巴
    • 叫声:汪汪~~
    • 会摇尾巴
  • 这是狗的共同特征行为
  • 通过将具有共同特征和行为的一组对象抽象定义,提出了另外一个新的概念————类
  • 而对象,在这个例子中就是真实存在的某一只狗
    • 它符合类所描述的基本特征,但同时它又是唯一的具体的

类的构成


  • 类(class)由三部分构成:
    • 类的名称:类名【遵循大驼峰命名方法】
    • 类的属性:一组变量【数据】
    • 类的方法:一组函数操作【行为】
  • 对应例子:
    • 类的名称:狗
    • 类的属性:毛色、大小、品种
    • 类的方法:会跑、会叫、会吃东西

定义一个类


class 类名:
    方法
  • 定义一个狗的类
class Dog(object):
    def base_info(self):
        print('四肢')
        print('尾巴')
        print('两个耳朵')
        print('叫声:汪汪~~')
        print('会摇尾巴')

    def run(self):
        print('奔跑')

创建对象


  • 格式:
    • 对象名 = 类名()
  • 示例:
class Dog(object):
    def base_info(self):
        print('四肢')
        print('尾巴')
        print('两个耳朵')
        print('叫声:汪汪~~')
        print('会摇尾巴')

    def run(self):
        print('奔跑')

dog = Dog()
dog.color = 'yellow'  # 添加毛色属性
dog.speed = 10  # 添加速度属性

dog.run()  # 调用方法,奔跑
  • 输出结果:
奔跑
小结
  • 创建对象,其实就像用一个模型,生产一个具体的物品
  • 就是模型,对象就是具体的物品

self


  • self,可以理解为对象自身
  • 当某个对象调用其方法时,Python 解释器会自动把这个对象作为第一个参数传递给 self
  • 所以开发者只需要传递 self 后面的参数即可(没有的话就什么都不用传了)

初始化方法


class 类名():
    # 初始化函数,用来完成一些默认的设定
    def __init__():  # 这个就是 Python 类的构造函数
  • 定义一个狗的类:
class Dog(object):
    def __init__(self):
        self.leg = 4
        self.tail = 1
        self.ear = 2
        self.voice = '汪汪~~'

    def base_info(self):
        print('四肢')
        print('尾巴')
        print('两个耳朵')
        print('叫声:汪汪~~')
        print('会摇尾巴')

    def run(self):
        print('奔跑')

# 创建狗的对象
dog = Dog()

print('狗有 {} 条腿'.format(dog.leg))
print('狗有 {} 条尾巴'.format(dog.tail))
print('狗有 {} 个耳朵'.format(dog.ear))
print('狗的叫声是:{}'.format(dog.voice))
  • 输出结果:
狗有 4 条腿
狗有 1 条尾巴
狗有 2 个耳朵
狗的叫声是:汪汪~~
总结
  • 从上面的例子看创建了 Dog 对象后,并没有调用 init() 方法
  • 但是 legtailearvoice 等属性就有了
  • 这是因为创建对象的时候,构造函数 init() 就自动被调用
思考一下
  • 如何给构造函数 __init__() 传递参数呢?
class Dog(object):
    def __init__(self, curTail, curVoice):
        self.tail = curTail
        self.voice = curVoice

    def base_info(self):
        print('四肢')
        print('尾巴')
        print('两个耳朵')
        print('叫声:汪汪~~')
        print('会摇尾巴')

    def run(self):
        print('奔跑')

dog = Dog(1, '汪汪~~~')

print('狗有 {} 条尾巴'.format(dog.tail))
print('狗的叫声是:{}'.format(dog.voice))
  • 输出结果:
狗有 1 条尾巴
狗的叫声是:汪汪~~~
  • 小结:
    • 在创建一个对象时会默认调用 __init__() 方法
    • __init__(self) 中,默认有 **1 **个参数名字为 self
      • 如果在创建对象时需要传递 2 个实参
      • 那么 __init__(self) 中除了 self 作为第 1 个形参外,还需要 2 个形参
      • 例如 __init__(self, x, y)
  • __init__(self) 中的 self 参数,不需要开发者传递,python 解释器会自动当前的对象的引用传递进去
    • 类里面的其它方法也一样,不需要开发者传递 self
  • 在 python 中方法名如果是 __xxxx__() 的,那么都是有特殊功能的,因此叫做 "魔法方法"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值