鱼C论坛

 找回密码
 立即注册
查看: 2671|回复: 8

[学习笔记] Python学习笔记21-----类与面向对象编程 New!

[复制链接]
发表于 2020-8-16 22:29:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 极品召唤兽 于 2020-8-17 21:21 编辑



类与实例

编程与生活是相通的,我们生活中把事物按 类 划分,比如人类、狗类、动物类、植物类等。在编程世界里,同样也分了很多 类,比如字符串、整数、浮点数等,我们用 type() 函数验证一下。

在 Python 中 类 是无数个相似个体的集合,其中的每个个体叫做 实例。


                               
登录/注册后可看大图


类的创建

我们以人类来举例,人类都有哪些共同点呢?两条胳膊、两条腿、直立行走、有着各种颜色的头发、说着各式各样的语言等。这些共同点分为两类:

特征:两条胳膊、两条腿、有着各种颜色的头发
行为:直立行走、说着各式各样的语言
在 Python 的类中,我们把这种特征和行为分别称为 属性(attribute)和 方法(method)。现实生活中的“类”是我们归纳总结出来的,而 Python 中的类需要我们自行创建。接下来我们看看如何创建一个类。

class Human:
  arms = 2
  legs = 2
  hair = '各种颜色的头发'

  def walk(self):
    print('直立行走')

  def speak(self):
    print('说着各式各样的语言')



                               
登录/注册后可看大图


类的 属性 的创建和变量的定义是一样的,类的 方法 的创建和函数的定义也很类似。唯一不同的是:类的 方法 中有个必须放在首位的参数 self,它表示创建的实例本身。至于为什么需要这个 self,我们后面细说。


类的调用


  1. class Human:
  2.   arms = 2
  3.   legs = 2
  4.   hair = '各种颜色的头发'

  5.   def walk(self):
  6.     print('直立行走')

  7.   def speak(self):
  8.     print('说着各式各样的语言')

  9. # 类的实例化
  10. human = Human()

  11. print(human.arms)
  12. # 输出:2

  13. print(human.legs)
  14. # 输出:2

  15. print(human.hair)
  16. # 输出:各种颜色的头发

  17. human.walk()
  18. # 输出:直立行走

  19. human.speak()
  20. # 输出:说着各式各样的语言
复制代码



                               
登录/注册后可看大图


我们实例化后得到实例 human 后,实例 human 就拥有了 Human 类的所有 属性 和 方法。然后我们通过 实例名.属性名 和 实例名.方法名 去调用它们。


                               
登录/注册后可看大图


class Human:
  arms = 2
  legs = 2
  hair = '各种颜色的头发'

  def walk(self):
    print('直立行走')

  def speak(self):
    print('说着各式各样的语言')

  def intro(self):
    # 类的方法里访问类的变量
    print('人类有%d条胳膊%d条腿' % (self.arms, self.legs))

# 类的实例化
human = Human()

human.intro()
# 输出:人类有2条胳膊2条腿


                               
登录/注册后可看大图




                               
登录/注册后可看大图



在 Python 的类中,有一种特殊的方法——初始化方法。它的格式是 def __init__(self):,方法名由 init(initialize 的缩写,初始化的意思)加左右两边的 双下划线 组成。



注意:初始化方法的 init 前后各有 两个 下划线,是 __init__ 而不是 _init_。


初始化方法的特殊之处是:每当进行类的实例化时,初始化方法会自动被执行。我们看个例子:

  1. class Human:
  2.   def __init__(self):
  3.     print('Hi,我是 Human 类的初始化方法')

  4. human = Human()
  5. # 输出:Hi,我是 Human 类的初始化方法
复制代码


我们通常会在 初始化方法 里完成类属性初始值的设置

  1. class Human:
  2.   def __init__(self):
  3.     # self.不能丢
  4.     self.arms = 2
  5.     self.legs = 2
  6.     self.hair = '各种颜色的头发'

  7.   def walk(self):
  8.     print('直立行走')

  9.   def speak(self):
  10.     print('说着各式各样的语言')

  11. human = Human()
  12. print(human.hair)
  13. # 输出:各种颜色的头发
复制代码

除了进行固定的初始值设置,初始化方法 可以接收其他参数,进行自定义的属性初始值设置。我们再看个例子

  1. class Human:
  2.   def __init__(self, name, arms, legs, hair):
  3.     # self.不能丢
  4.     self.name = name
  5.     self.arms = arms
  6.     self.legs = legs
  7.     self.hair = hair

  8.   def walk(self):
  9.     print('直立行走')

  10.   def speak(self):
  11.     print('说着各式各样的语言')

  12.   def intro(self):
  13.     print('我叫{},我有{}'.format(self.name, self.hair))

  14. xiaobei = Human('小贝', 2, 2, '粉红色的头发')
  15. print(xiaobei.name)
  16. # 输出:小贝

  17. xiaobei.intro()
  18. # 输出:我叫小贝,我有粉红色的头发
复制代码


实例演练

class Human:
  # 在这里补充初始化方法
  def __init__(self,name,heads,arms):
    self.name = name
    self.heads  = heads
    self.arms = arms
  
  def intro(self):
    print('我叫{},我有{}头{}臂'.format(self.name, self.heads, self.arms))

nezha = Human('哪吒',3,6)
nezha.intro()


可以看到,有了 __str__() 方法,直接打印实例的结果为 __str__() 方法的返回值。因此,我们可以使用 __str__() 方法来描述一个类。



                               
登录/注册后可看大图


面向对象与面向过程


面向过程

  1. # 1.用字典存储姓名和分数
  2. student1 = {'name': '小贝', 'score': 98}
  3. student2 = {'name': '闻闻', 'score': 93}

  4. # 2.定义打印分数的函数
  5. def print_score(student):
  6.   print('姓名:%s,分数:%d' % (student['name'], student['score']))

  7. # 3.调用打印分数的函数
  8. print_score(student1)
  9. print_score(student2)
复制代码

面向对象

  1. # 1.定义学生类
  2. class Student:
  3.   def __init__(self, name, score):
  4.     self.name = name
  5.     self.score = score

  6.   def print_score(self):
  7.       print('姓名:%s,分数:%d' % (self.name, self.score))

  8. # 2.实例化学生类
  9. student1 = Student('小贝', 98)
  10. student2 = Student('闻闻', 93)

  11. # 3.调用实例的方法
  12. student1.print_score()
  13. student2.print_score()
复制代码


例子

from random import randint

class Lottery:
  def __init__(self, times):
# 号码个数
    self.times = times
# 中奖号码池
    self.lottery = []

  def draw_lottery(self):
    for i in range(0, self.times):
      number = randint(0, 99)
      self.lottery.append(number)

  def print_lottery(self):
    print('本期彩票中奖号码为:%s' % self.lottery)
# 实例化,抽 6 个号码
lottery = Lottery(6)
# 抽奖
lottery.draw_lottery()
# 开奖
lottery.print_lottery()





评分

参与人数 2荣誉 +5 鱼币 +3 收起 理由
小鲨鱼666 + 5
nizitao + 3

查看全部评分

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-8-17 06:41:49 | 显示全部楼层

回帖奖励 +1 鱼币

大佬,这里例子是不是应该导入random模块呐?

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
极品召唤兽 + 1 + 1 是的哦!谢谢提醒~

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-17 10:39:23 | 显示全部楼层

回帖奖励 +1 鱼币

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-8-17 20:59:28 | 显示全部楼层
始不垂翅 发表于 2020-8-17 06:41
大佬,这里例子是不是应该导入random模块呐?

欧了 已经加上了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-18 22:00:31 | 显示全部楼层

回帖奖励 +1 鱼币

学习了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-18 22:06:04 | 显示全部楼层
加油
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-8-18 22:07:38 | 显示全部楼层

hhh可以自己再抄录一些  总结一下QWQ
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-20 18:27:41 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-8-20 18:31:16 | 显示全部楼层
加油学习吧,因为运气不行
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-23 14:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表