一些关于自己学习Python的经历的内容,遇到的问题和思考等,方便以后查询和复习。

声明:本人学习是在扇贝编程通过网络学习的,相关的知识、案例来源于扇贝编程。如果使用请说明来源。

第27关 类与面向对象编程

练习:自己编写一个类

这一次我们不给任何提示,完全凭你自己写一个类。你可以思考一下生活中还有哪些“类”,有哪些特征和行为?然后用代码的方式写出来吧!

class Human:  #定义类的时候,类名称后面没有括号和参数

arms = 2

legs = 2

eyes = 2

ears = 2

nose = 1

hair = '各种颜色的头发'

def speak(self):  #方法里面都是类的行为。

print('会说话')

def walk(self):

print('会走路')

def work(self):

print('会做各种工作或者工具')

class Chinese(Human):

pass

class Jiangsu(Chinese):

hair = '黑色头发'

def work(self):

print('会走馒头和花卷')

def speak(self):

print('会说汉语,普通话不太标准')

#这几个我最初放在了实例化lijsh后面,导致错误,实例化之后,直接调用,不进行赋值

lijsh = Jiangsu()  #这里有个括号,但是没有英文冒号

print(lijsh.arms)

print(lijsh.legs)

print(lijsh.eyes)

print(lijsh.hair)

lijsh.work()

lijsh.speak()

lijsh.walk()

练习:第一武道会

五年一届的“天下第一武道会”又开始了!接下来登场的选手是卡卡罗特和比克大魔王,他们的初始血量都为 100,轮番攻击,每次攻击打出 10-20 点伤害,对方有 20% 的几率防御成功不受伤害。

Player 类的主体已经完成,还差一个 defend()(防御) 方法,请你根据要求补全它并补全轮番攻击的代码。

要求:

当受到伤害时,将当前血量(health)减去伤害值(damage),并打印出 xxx受到xx点伤害,血量剩余xx;

有 20% 的几率防御成功不受伤害,血量不变并打印出 xxx防御成功;

当受到伤害后,血量小于等于 0 时打印 xxx被击败;

使用循环使两人轮番攻击,当其中一人血量小于等于 0 时,结束循环。

from random import randint, random

class Player:

def __init__(self, name):

self.name = name

self.health = 100

def attack(self, target):

print(self.name + '发起攻击')

damage = randint(10, 20)

target.defend(damage)

def defend(self, damage):

# 补全 defend() 方法

if damage > 0:

health = health - damage

print('%s受到%d点伤害,血量剩余%d'%(self.name, ))

kakarotto = Player('卡卡罗特')

piccolo = Player('比克大魔王')

# 使用循环轮番攻击,当有人被击败后停止循环

kakarotto.attack(piccolo)

piccolo.attack(kakarotto)

我编写一半是在写不下去了,就放弃了,看了答案

根据答案写的代码:

from random import randint, random

class Player:

def __init__(self, name):

self.name = name

self.health = 100

def attack(self, target):

print(self.name + '发起攻击')

damage = randint(10, 20)

target.defend(damage)

def defend(self, damage):

# 补全 defend() 方法

if random() > 0.2:  #random()生成0-1不包括1的小数。

self.health = self.health - damage

print('%s受到%d点伤害,血量剩余%d'%(self.name, damage, self.health))

if self.health <= 0:

print(self.name + '被击败')

else:

print(self.name + '防御成功')

print('----------------------')

kakarotto = Player('卡卡罗特')

piccolo = Player('比克大魔王')

# 使用循环轮番攻击,当有人被击败后停止循环

#kakarotto.attack(piccolo)

piccolo.attack(kakarotto)

kakarotto.attack(piccolo)

while True:

if kakarotto.health > 0:

kakarotto.attack(piccolo)

else:

break

if piccolo.health > 0:

piccolo.attack(kakarotto)

else:

break

感觉程序越来越复杂,前后的逻辑关系,引用关系等,都越来难以把握了。比如这个程序,我能看懂程序,知道功能和作用,运行的逻辑等,但是自己写不出来。不知道最初写代码的人是不是都是我这样,还是我创新力差,年纪大反应慢。哎

练习:类的继承和调用

之前写过一个 Bird 类,这次我们再写一个继承自 Bird 类的 Lark(百灵鸟)类。Lark 类里只有一个空语句 pass,然后将 Lark 类实例化并调用 Bird 类中的 intro() 方法。

class Bird:

wings = 2

def fly(self):

print('我会飞')

def intro(self):

print('我有%d只翅膀' % self.wings)

self.fly()

class Lark(Bird):

pass

lark = Lark()

lark.intro()

练习:类的多重继承

骡为马和驴杂交的产物,公驴和母马生的为马骡(Mule),公马和母驴生的为驴骡(Hinny)。

现在已经有了 Horse(马)类和 Donkey(驴)类,请你创建一个 Mule 类(马骡)和 Hinny(驴骡)类,分别继承自 Horse、Donkey 和 Donkey、Horse,然后对其进行实例化,试试调用其中的属性和方法。

# 马

class Horse:

character = '性格温顺'

def ride(self):

print('我能作为骑乘')

# 驴

class Donkey:

character = '性格暴躁'

def work(self):

print('我能拉磨')

# 马骡

class Mule(Horse, Donkey):

pass

# 驴骡

class Hinny(Donkey, Horse):

pass

mule = Mule()

hinny = Hinny()

print(mule.character)

mule.work()

mule.ride()

print(hinny.character)

hinny.ride()

hinny.work()

练习:类的定制

小贝最近拜了个武林高手为师,大师将武功秘籍 九阴真经 和武功 九阴白骨爪 都传授给了小贝。小贝刻苦练习将 九阴白骨爪 改进成了 九阴白骨爪改进版,并自学了武功秘籍 九阳神功 练成了 金刚不坏之躯。

模板代码中已经替你写好了 Master(师傅) 类,接下来请你补全 Apprentice(徒弟) 类使代码正常运行。

要求:

Apprentice 类继承 Master 类;

Apprentice 类中新增一个 book2 的属性,值为 九阳神功,新增一个 kungfu2() 的方法,功能是打印出 金刚不坏之躯;

Apprentice 类中重写 kungfu() 方法,改成打印出 九阴白骨爪改进版。

# 师傅

class Master:

book = '九阴真经'

def kungfu(self):

print('九阴白骨爪')

# 补全徒弟的代码

class Apprentice(Master):

#book = '九阴真经'

book2 = '九阳神功'

def kungfu(self):

print('九阴白骨爪改进版')

def kungfu2(self):

print('金刚不坏之躯')

xiaobei = Apprentice()

print(xiaobei.book)

print(xiaobei.book2)

xiaobei.kungfu()

xiaobei.kungfu2()

学习笔记:

类的继承

通过 class 子类名(父类名) 的方式实现了类的继承,让子类拥有了父类的所有属性和方法。

class Chinese(Human):

pass

提示:pass 是空语句,表示跳过,什么都不做。

类的多层继承

继承不只是子类继承父类的属性和方法,当父类还有自己的父类时,子类也能继承父类的父类的属性和方法。

class Chinese(Human):

pass

class JiangSu(Chinese):

pass

类的属性和方法会通过继承一直传递下去,减少了大量的重复代码,实现了代码的复用。

类的多重继承

除了继承一个类,我们还可以同时继承多个类,语法是 class 类 A(类 B, 类 C, 类 D):。

class ABC(Chinese, American):

pass

class ABC(Chinese, American): 中 Chinese 靠前,调用实例的属性和方法时会优先在子类中查找,找不到再从最左侧的父类依次往右查找,直到找到为止,如果都没有找到则会报错。

类的定制

你可能会有疑问,既然子类继承父类的所有属性和方法,它俩是一样的,为什么不直接使用父类呢?因为类除了可以继承之外,还可以进行定制!我们可以在父类的基础上做以下两点定制:

新增:创建新的属性和方法

重写:修改继承自父类的属性和方法

新增 指在继承父类的属性和方法的基础上添加自己独有的属性或方法。比如:师傅传授给你一套武功,你自己又练了别的功法,这样你就既继承了师傅的功法,也独创了自己的功法。

重写 指在继承父类的属性和方法的基础上重写父类的属性和方法。比如:师傅传授给你一套武功,你对其进行了改进,同样的功法就变成你的独创功法。

需要注意的点:

定义类的方法时,第一个参数 self 不能丢,调用方法时要忽略;

self 作用是代替实例本身,在类中访问类的属性和方法;

初始化方法 __init__() 在类实例化时会自动执行,一般用于类属性的初始化;

子类可以继承父类的所有属性和方法,并且可以定制自己的属性和方法。

第27关

python面向对象编程72讲_2020-07-22 Python学习笔记27类和面向对象编程相关推荐

  1. 《Python核心编程(第3版)》学习笔记及书评

    <Python核心编程(第3版)>学习笔记 文章目录 <Python核心编程(第3版)>学习笔记 写在前面 1. 正则表达式 1.1 常用语法 1.2 re模块 2. 网络编程 ...

  2. Python语言入门这一篇就够了-学习笔记(十二万字)

    Python语言入门这一篇就够了-学习笔记(十二万字) 友情提示:先关注收藏,再查看,12万字保姆级 Python语言从入门到精通教程. 文章目录 Python语言入门这一篇就够了-学习笔记(十二万字 ...

  3. Linux学习笔记(3)- 网络编程以及范例程序

    Linux学习笔记(3)- 网络编程以及范例程序 前言 网络介绍 IP地址的介绍 端口和端口号的介绍 通信流程 socket介绍 TCP介绍 python3编码转换 TCP客户端程序开发流程 多任务版 ...

  4. AI初学笔记4 类与面向对象的创建

    AI初学笔记4 类与面向对象的创建 文章目录 AI初学笔记4 类与面向对象的创建 一.什么是类,什么是面向对象 代码实现 二.实例属性 代码实现 三.实例属性应用 代码实现 四.魔法方法 五.案例编写 ...

  5. Java 3D编程实践_Java 3D编程实践——网络上的三维动画[学习笔记]

    评论 # re: Java 3D编程实践--网络上的三维动画[学习笔记] 2006-08-24 23:41 gy # re: Java 3D编程实践--网络上的三维动画[学习笔记] 2007-03-2 ...

  6. Python学习笔记 (类与对象)

    Python学习笔记 (类与对象) 1.类与对象 面向对象编程语言类: 一个模板, (人类)-是一个抽象的, 没有实体的对象: (eg: 张三, 李四) 属性: (表示这类东西的特征, 眼睛, 嘴巴, ...

  7. 《疯狂Java讲义》学习笔记 第六章 面向对象(下)

    <疯狂Java讲义>学习笔记 第六章 面向对象(下) 6.1包装类 基本数据类型 包装类 byte Byte short Short int Integer long Long char ...

  8. 阿里云“7天实践训练营”入门班第二期学习笔记 第五天 在线编程挑战

    阿里云"7天实践训练营"入门班第二期学习笔记 第五天 在线编程挑战 吾辈,完全不会编程 以下内容全程来自阿里云社区的大佬分析讲解 原题目 知识点:搜索.字符串.位运算 有一天Jer ...

  9. 《Python地理空间分析指南 第2版》学习笔记-5.1 距离测量

    第5章 Python与地理信息系统 本章主要学习Python处理矢量数据,包含以下内容: 距离测量 坐标转换 矢量数据重投影 Shapefile 文件编辑 海量数据过滤 专题地图创建 非GIS数据类型 ...

最新文章

  1. 根际微生物组提高植物耐盐性的研究进展(Biotechnology Advances IF=10)
  2. wsl设置c盘自动挂载到wsl中的/c/目录下
  3. 在SQL Server里如何进行页级别的恢复
  4. 文献记录(part20)--Discriminative metric learning for multi-view graph partitioning
  5. 自定义滚动条(Custom ScrollBar)
  6. rocketmq 订阅组_必须先理解的RocketMQ入门手册,才能再次深入解读
  7. 计算机网络技术放块队解说词,基于《计算机网络技术》课程多媒体课件制作与设计.doc...
  8. UE3 使用光源函数
  9. java n*n矩阵求值及求逆矩阵
  10. 双缓冲(Double Buffer)原理和使用【转】
  11. 使用Doxygen + graphviz生成Unity 3d的UGUI类图
  12. 用java写一个用户登陆界面的代码分享
  13. python程序设计搜题软件下载_智慧职教云课堂APPPython程序设计期末考试搜题公众号答案...
  14. win7 java修复工具哪个好_DLL修复工具哪个好
  15. QQ坦白说查看好友方法攻略
  16. 最新最全省级面板数据(1997-2020)
  17. Latex的各种帽子
  18. 基于微信小程序的学习记录与提醒应用设计与实现-计算机毕业设计源码+LW文档
  19. 云计算与大数据技术 李春燕
  20. Springboot错误页面和错误信息定制

热门文章

  1. 机械师曙光 16 Air 锐龙版 评测 怎么样
  2. eXact 手动输入Lab数值
  3. python pandas 官网_Pandas 最详细教程
  4. 网络安全攻防界的OSCP、CISP-PTE、CISP-PTS、CISP-IRE、CISP-IRS
  5. selenium的些许操作
  6. python下载b站视频_【python】抖音无水印视频下载和b站视频下载
  7. Springboot校园单车租赁管理系统 毕业设计-附源码83654
  8. Android:O泡果奶——来场恶作剧
  9. 给你的MuseUI应用添加字体、样式
  10. sublime text2 两文件比较