专栏首页石开之旅小甲鱼《零基础学习Python》课后笔记(三十七):类和对象——面向对象编程

小甲鱼《零基础学习Python》课后笔记(三十七):类和对象——面向对象编程

测试题

0.以下代码体现了面向对象编程的什么特征?

>>> "FishC.com".count('o')
1
>>> [1, 1, 2, 3, 5, 8].count(1)
2
>>> (0, 2, 4, 8, 12, 18).count(1)
0

多态,调用同一个方法结果不一样。

1.当程序员不想把同一段代码写几次,他们发明了函数解决了这种情况。当程序员已经有了一个类,而又想建立一个非常接近的新类,他们会怎么做呢? 定义一个新类继承已有的这个类,这样子只需要简单重写和添加需要的方法。

2.self参数的作用是什么? 绑定方法。self参数类似于人的身份证,每个实例对象都有唯一的self参数。

3.如果我们不希望对象的属性或方法被外部直接引用,我们可以怎么做? 我们可以在属性或方法名字前边加上双下划线,这样子从外部是无法直接访问到,会显示AttributeError错误。

>>> class Person:  
		__name = '小甲鱼'  
	    def getName(self):  
	        return self.__name  
	  
	      
>>> p = Person()  
>>> p.__name  
Traceback (most recent call last):  
	File "<pyshell#7>", line 1, in <module>  
		p.__name  
AttributeError: 'Person' object has no attribute '__name'  
>>> p.getName()  
'小甲鱼' 

因为加了“__”就变成私有元素,类外部不能直接访问,但可以通过类的方法间接访问。但其实Python只是把元素名改变了而已,可以通过“_类名__变量名”访问,即_Person__name。

4.类在实例化后哪个方法会被自动调用? __init__方法会在类实例化时被自动调用,称为魔法方法。

5.请解释下边代码错误的原因:

>>> class Myclass:  
		name = 'FishC'  
	    def myFun(self):  
        print("Hello FishC!")  
  
          
>>> Myclass.name  
'FishC'  
>>> Myclass.myFun()  
Traceback (most recent call last):  
	File "<pyshell#12>", line 1, in <module>  
		Myclass.myFun()  
TypeError: myFun() missing 1 required positional argument: 'self' 

我们通常说的类指的是类定义,由于“Python无处不对象”,所以当类定义完之后,自然就是类对象。这个时候你可以直接对类的属性(变量)进行直接访问(Myclass.name)。

一个类可以实例化出无数的对象(实例对象),Python为了区分哪个实例对象调用了方法,于是要求方法必须绑定(通过self参数)才能调用。而未实例化的类对象直接调用方法,因为缺少self参数,所以会报错。

动动手

0.按照以下要求定义一个游乐园门票的类,并尝试计算2个成人+1个小孩平日票价。 a.平日票价100元 b.周末票价为平日的120% c.儿童半价

>>> class Ticket(object):
	"""docstring for Ticket"""
	def __init__(self, weekend = False, child = False):
		self.exp = 100
		if weekend:
			self.inc = 1.2
		else:
			self.inc = 1
		if child:
			self.discount = 0.5
		else:
			self.discount = 1
	def calcPrice(self, num):
		return self.exp * self.inc * self.discount * num

	
>>> adult = Ticket()
>>> child = Ticket(child = 1)
>>> print("2个成人+1个小孩平日票价为:%.2f" % (adult.calcPrice(2) + child.calcPrice(1)))
2个成人+1个小孩平日票价为:250.00

1.游戏编程:按以下要求定义一个乌龟类和鱼类并尝试编写游戏。(初学者不一定可以完整实现,但请务必先自己动手,你会从中学习到很多知识的) a.假设游戏场景为范围(x,y)为0<=x<=10,0<=y<=10 b.游戏生成1只乌龟和10条鱼 c.它们的移动方向均随机 d.乌龟的最大移动能力是2(Ta可以随机选择1还是2移动),鱼儿的最大移动能力是1 e.当移动到场景边缘,自动向反方向移动 f.乌龟初始化体力为100(上限) g.乌龟每移动一次,体力消耗1 h.当乌龟和鱼坐标重叠,乌龟吃掉鱼,乌龟体力增加20 i.鱼暂不计算体力 由于这一题实在是没写出来,先战略性撤退。。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 小甲鱼《零基础学习Python》课后笔记(三十八):类和对象——继承

    测试题: 0.继承机制给程序猿带来的最明显的好处是? 写一个新类时可以从旧类继承,不用重复编写,减少重复劳动。

    小火柴棒
  • 小甲鱼《零基础学习Python》课后笔记(三十六):类和对象——给大家介绍对象

    2.如果我们定义了一个猫类,那你能想象出由“猫”类实例化的对象有哪些? 黑猫,白猫,黑猫警长。

    小火柴棒
  • Python数据可视化--生成随机漫步数据

    初次接触Python3的数据图表操作,其实和MATLAB语法很相似,所以有一丝似曾相识的感觉。本篇主要是使用Python的matplotlib库来绘制随机漫步图...

    小火柴棒
  • Simplex 单纯形算法的python

    算法可以在给定一个包含线性规划问题的标准形式的描述下,求解该线性规划问题。 例如某一个 pro.txt 文件内容如下:

    py3study
  • python post传输文件脚本

    ps:背景,无法ssh相互访问机器(一般中间有堡垒机阻拦)的情况下,但是使用域名可以进行访问的情况下 可以使用http协议进行文件的上传。

    py3study
  • Python3结合Sciter编写桌面

    但由于是同一个进程,如果你做了很耗时的操作,比如下载一张图片之类的IO操作......

    py3study
  • 庆祝法国队夺冠:用Python放一场烟花秀

    天天敲代码的朋友,有没有想过代码也可以变得很酷炫又浪漫?今天就教大家用Python模拟出绽放的烟花庆祝昨晚法国队夺冠,工作之余也可以随时让程序为自己放一场烟花秀...

    猫咪编程
  • PyQt5 从零开始制作 PDF 阅读器(二)

    上一篇文章中,我们实现了 PDF 阅读器的初始界面。这一次,新增了阅读功能,可以实现基本的翻页以及缩放等操作。不过,暂时只可以同时阅读一本书。(文末小程序留言)

    用户2870857
  • python pyqt5 卡通人物形状窗体

    import sys from PyQt5.QtWidgets import QApplication, QWidget from PyQt5.QtGui ...

    用户5760343
  • python pyqt5 带分页表格

    import sys import re from PyQt5.QtWidgets import (QWidget, QHBoxLayout, QVBoxL...

    用户5760343

扫码关注云+社区

领取腾讯云代金券