【python37--面向对象】
一、 self是什么
绑定方法,self就是实例对象的唯一标志
>>> class Ball:
def setName(self,name):
self.name = name
def clik(self):
print('我是%s'%self.name) >>> a = Ball()
>>> a.setName('小A')
>>> b = Ball()
>>> b.setName('小B')
>>> a.clik()
我是小A
>>> b.clik()
我是小B ----
a = Ball() #实例对象
a.setName('小A') #通过self可以得知是a在调用这两个方法setName()和clik()
二、python的魔法方法
1、_init_(self):构造函数,类在实例化时被自动调用
_init_(self,param1,param2...)
>>> class Ball:
def __init__(self,name):
self.name = name
def clik(self):
print('我是%s' % self.name) >>> a = Ball('小A')
>>> a.clik()
我是小A ---------
采用__init__()函数后,在实例化对象 a = Ball('小A')时直接可以赋值
而省去了第一个例子的a.setName('小A')
三、共有和私有
共有:对象的属性和方法就是共有的,可以采用'.方法'/'.属性'访问
私有:在python中定义私有变量只需要在变量名或者函数前加上两个下划线‘__’,那么这个函数或者变量名就变成了私有的了
>>> class Person:
__name = '尘封'
def getName(self):
return self.__name >>> p = Person()
>>> p.getName()
'尘封' >>> p._Person__name
'尘封' '''__name:私有化属性
|-- 两种调用私有化的方法
|-- 第一种定义方法getName(),p.getName()
|--第二种:p._person__name (person只有一个下划线,name有两个下划线)
'''
四、类的继承(已经有了一个类,编写另外一个相似的类,就可以采用继承)
五、如果我们不希望属性或者方法被外部调用,就可以在属性或者方法前面加两个下划线,即:私有化属性,私有化方法(如果外部调用,则会报AttributeError错误)
>>> class Person:
__name = '尘封'
def getName(self):
return self.__name
>>> p = Person()
>>> p.__name
Traceback (most recent call last):
File "<pyshell#39>", line 1, in <module>
p.__name
AttributeError: 'Person' object has no attribute '__name'
六、按照以下要求定义一个游乐园的类,计算两个成人+一个小孩平日票价
* 平日报价:100
* 周末票价为平日的120%
* 儿童半价
class 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 calcPice(self,num):
return self.exp*self.inc*self.discount*num adult = Ticket()
adult_weekend = Ticket(weekend=True)
child = Ticket(child=True)
print('2个成人+1个小孩平日的票价 %.2f'% (adult.calcPice(2) + child.calcPice(1)))
print('2个成人+1个小孩假日的票价 %.2f'%(adult_weekend.calcPice(2)+child.calcPice(1)))
七、按以下要求定义一个乌龟类和鱼类并尝试编写游戏
--假定游戏场景范围为(x,y)为0<=x<=10,0<=y<=10
--游戏生成1只乌龟和10条鱼
--他们移动方向均随机
--乌龟的最大移动距离为2(它可以随机选择1还是2移动),鱼儿的最大移动距离为1
--当移动到场景边缘,自动像反方向移动,
--乌龟初始化体力为100(上限)
--乌龟每移动一次,体力消耗1
--当乌龟和鱼坐标重叠,乌龟吃掉鱼,乌龟体力增加20
--鱼暂不计算体力
--当乌龟体力为0(挂掉) 或者鱼儿的数量为0游戏结束
import random as r legal_x = [0,10]
legal_y = [0,10] class Turtle:
def __init__(self):
#初始化体力,初始随机位置
self.power = 100
self.x = r.randint(legal_x[0],legal_x[1])
self.y = r.randint(legal_y[0],legal_y[1]) def move(self):
# 计算乌龟移动的距离
new_x = self.x+r.choice([1,2,-1,-2])
new_y = self.y+r.choice([1,2,-1,-2]) #判断是否超出了x边界
if new_x < legal_x[0]:
self.x = legal_x[0] - (new_x - legal_x[0])
elif new_x >legal_x[1]:
self.x = legal_x[1] - (new_x - legal_x[1])
else:
self.x = new_x #判断是否超出了y边界
if new_y < legal_y[0]:
self.y = legal_y[0] - (new_y - legal_y[0])
elif new_y > legal_y[1]:
self.y = legal_y[1] - (new_y - legal_y[1])
else:
self.y = new_y self.power -= 1
return (self.x,self.y) def eat(self):
self.power += 20
if self.power > 100:
self.power = 100 class Fish:
def __init__(self):
self.x = r.randint(legal_x[0],legal_x[1])
self.y = r.randint(legal_y[0],legal_y[1]) def move(self):
new_x = self.x + r.choice([1,-1])
new_y = self.y = r.choice([1,-1]) if new_x < legal_x[0]:
self.x = legal_x[0] - (new_x - legal_x[0])
elif new_x > legal_x[1]:
self.x = legal_x[1] - (new_x - legal_x[1])
else:
self.x = new_x if new_y < legal_y[0]:
self.y = legal_y[0] - (new_y - legal_y[0])
elif new_y > legal_y[1]:
self.y = legal_y[1] - (new_y - legal_y[1])
else:
self.y = new_y return (self.x , self.y) #开始乌龟吃鱼的游戏,生成一只乌龟,生成10条鱼
turtle = Turtle()
fish = [] for i in range(10):
new_fish = Fish()
fish.append(new_fish) i =0
while True:
if turtle.power < 0:
print('乌龟体力耗尽,挂掉了!!!')
break
if len(fish) == 0:
print('鱼儿在被吃完,游戏结束!!!')
break #游戏开始运行
pos = turtle.move() for each_fish in fish[:]:
if each_fish.move() == pos:
turtle.eat()
fish.remove(each_fish)
print('鱼在(%d,%d)被吃掉一条...'%(pos[0],pos[1])) i +=1
print('乌龟共走了%d步'%i)
【python37--面向对象】的更多相关文章
- Pthon面向对象-补充知识
Pthon面向对象-补充知识 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.tracemalloc 标准库tracemalloc,可以统计内存使用情况,通过下面的案例可以看出内 ...
- angular2系列教程(六)两种pipe:函数式编程与面向对象编程
今天,我们要讲的是angualr2的pipe这个知识点. 例子
- 一起学 Java(二)面向对象
一.方法函数 函数也称为方法,就是定义在类中的具有特定功能的一段独立代码.用于定义功能,提高代码的复用性. 函数的特点1> 定义函数可以将功能代码进行封装,便于对该功能进行复用:2> 函数 ...
- js面向对象学习 - 对象概念及创建对象
原文地址:js面向对象学习笔记 一.对象概念 对象是什么?对象是“无序属性的集合,其属性可以包括基本值,对象或者函数”.也就是一组名值对的无序集合. 对象的特性(不可直接访问),也就是属性包含两种,数 ...
- 前端开发:面向对象与javascript中的面向对象实现(二)构造函数与原型
前端开发:面向对象与javascript中的面向对象实现(二)构造函数与原型 前言(题外话): 有人说拖延症是一个绝症,哎呀治不好了.先不说这是一个每个人都多多少少会有的,也不管它究竟对生活有多么大的 ...
- .NET 基础 一步步 一幕幕[面向对象之对象和类]
对象和类 本篇正式进入面向对象的知识点简述: 何为对象,佛曰:一花一世界,一木一浮生,一草一天堂,一叶一如来,一砂一极乐,一方一净土,一笑一尘缘,一念一清静.可见"万物皆对象". ...
- 简单分析JavaScript中的面向对象
初学JavaScript的时候有人会认为JavaScript不是一门面向对象的语言,因为JS是没有类的概念的,但是这并不代表JavaScript没有对象的存在,而且JavaScript也提供了其它的方 ...
- Java程序员应该了解的10个面向对象设计原则
面向对象设计原则: 是OOPS(Object-Oriented Programming System,面向对象的程序设计系统)编程的核心,但大多数Java程序员追逐像Singleton.Decorat ...
- JavaScript学习笔记(三)——this、原型、javascript面向对象
一.this 在JavaScript中this表示:谁调用它,this就是谁. JavaScript是由对象组成的,一切皆为对象,万物皆为对象.this是一个动态的对象,根据调用的对象不同而发生变化, ...
- 带你一分钟理解闭包--js面向对象编程
上一篇<简单粗暴地理解js原型链--js面向对象编程>没想到能攒到这么多赞,实属意外.分享是个好事情,尤其是分享自己的学习感悟.所以网上关于原型链.闭包.作用域等文章多如牛毛,很多文章写得 ...
随机推荐
- XML反序列化遇到数字型节点值为空导致反序列化异常
实体类: [XmlRoot("stream")] public class _30320DuisiFukuanQueryResponseModel : ResponseModelB ...
- 6.短信验证码60s倒计时
短信验证码60s倒计时 html: <input type="button" class="btn btn-primary" value="免 ...
- HBase针对性问题汇总
Q: Hbase的rk设计,Hbase优化 a\rowkey:hbase三维存储中的关键(rowkey:行键 ,columnKey(family+quilaty):列键 ,timestamp ...
- HDU 4565 So Easy(矩阵解公式)
So Easy [题目链接]So Easy [题目类型]矩阵解公式 &题解: 感觉这种类型的题都是一个套路,这题和hdu 2256就几乎是一样的. 所以最后2Xn就是答案 [时间复杂度]\(O ...
- BDD 与DSL 入门
正文: Behavior Driven Development,行为驱动开发是一种敏捷软件开发的技术,它鼓励软件项目中的开发者.QA和非技术人员或商业参与者之间的协作.在了解Behavior Driv ...
- Docker服务端和客户端
Docker是一个客户端-服务端(c/s)的架构程序
- 如何遍历tabcontrol控件的所有的tabpage中的所有控件
foreach(Control c in tabControl1.TabPages)这个循环的意思是说,遍历tabControl1中所有的TabPages,TabPages是包含在tabControl ...
- C语言---选择结构和循环结构
C语言的两种选择语句,1) if语句; 2) switch语句; 在if判断语句中,一般使用关系表达式. 关系运算符: <.<=.>.>=.==.!= 关系表达式:用关系运算符 ...
- 强化学习---TRPO/DPPO/PPO/PPO2
时间线: OpenAI 发表的 Trust Region Policy Optimization, Google DeepMind 看过 OpenAI 关于 TRPO后, 2017年7月7号,抢在 O ...
- Sitecore CMS中删除项目
如何删除项目以及如何在Sitecore CMS中恢复已删除的项目. 删除项目 有多种方便的方法可以删除Sitecore中的项目. 从功能区 在内容树中选择您要删除的项目. 单击功能区中“主页”选项卡的 ...