一、 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--面向对象】的更多相关文章

  1. Pthon面向对象-补充知识

    Pthon面向对象-补充知识 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.tracemalloc 标准库tracemalloc,可以统计内存使用情况,通过下面的案例可以看出内 ...

  2. angular2系列教程(六)两种pipe:函数式编程与面向对象编程

    今天,我们要讲的是angualr2的pipe这个知识点. 例子

  3. 一起学 Java(二)面向对象

    一.方法函数 函数也称为方法,就是定义在类中的具有特定功能的一段独立代码.用于定义功能,提高代码的复用性. 函数的特点1> 定义函数可以将功能代码进行封装,便于对该功能进行复用:2> 函数 ...

  4. js面向对象学习 - 对象概念及创建对象

    原文地址:js面向对象学习笔记 一.对象概念 对象是什么?对象是“无序属性的集合,其属性可以包括基本值,对象或者函数”.也就是一组名值对的无序集合. 对象的特性(不可直接访问),也就是属性包含两种,数 ...

  5. 前端开发:面向对象与javascript中的面向对象实现(二)构造函数与原型

    前端开发:面向对象与javascript中的面向对象实现(二)构造函数与原型 前言(题外话): 有人说拖延症是一个绝症,哎呀治不好了.先不说这是一个每个人都多多少少会有的,也不管它究竟对生活有多么大的 ...

  6. .NET 基础 一步步 一幕幕[面向对象之对象和类]

    对象和类 本篇正式进入面向对象的知识点简述: 何为对象,佛曰:一花一世界,一木一浮生,一草一天堂,一叶一如来,一砂一极乐,一方一净土,一笑一尘缘,一念一清静.可见"万物皆对象". ...

  7. 简单分析JavaScript中的面向对象

    初学JavaScript的时候有人会认为JavaScript不是一门面向对象的语言,因为JS是没有类的概念的,但是这并不代表JavaScript没有对象的存在,而且JavaScript也提供了其它的方 ...

  8. Java程序员应该了解的10个面向对象设计原则

    面向对象设计原则: 是OOPS(Object-Oriented Programming System,面向对象的程序设计系统)编程的核心,但大多数Java程序员追逐像Singleton.Decorat ...

  9. JavaScript学习笔记(三)——this、原型、javascript面向对象

    一.this 在JavaScript中this表示:谁调用它,this就是谁. JavaScript是由对象组成的,一切皆为对象,万物皆为对象.this是一个动态的对象,根据调用的对象不同而发生变化, ...

  10. 带你一分钟理解闭包--js面向对象编程

    上一篇<简单粗暴地理解js原型链--js面向对象编程>没想到能攒到这么多赞,实属意外.分享是个好事情,尤其是分享自己的学习感悟.所以网上关于原型链.闭包.作用域等文章多如牛毛,很多文章写得 ...

随机推荐

  1. Unity shader学习之阴影

    Unity阴影采用的是 shadow map 的技术,即把摄像机放到光源位置上,看不到的地方就有阴影. 前向渲染中,若一光源开启了阴影,Unity会计算它的阴影映射纹理(shadow map),它其实 ...

  2. Sitecore系统教程之模板理解

    Sitecore中的所有内容都是一个项目.模板也是如此.Sitecore中的模板是一个项目,它定义了其他项目的结构和行为.Sitecore中的每个项目都是某个模板的实例.模板还可以定义它分解成的部分和 ...

  3. Python -- print(dataframe)时,省略部分列。

    import pandas as pd # 导入后加入以下列,再显示时显示完全. pd.set_option('display.max_rows',500) pd.set_option('displa ...

  4. uvalive 5731 Qin Shi Huang’s National Road System

    题意: 秦始皇要修路使得所有的城市连起来,并且花费最少:有一个人,叫徐福,他可以修一条魔法路,不花费任何的钱与劳动力. 秦始皇想让修路的费用最少,但是徐福想要受益的人最多,所以他们经过协商,决定让 A ...

  5. TMC首秀:写作带给我生命的影响与感动

    蓦然回首,写作已陪伴了我十三个年头,横跨大学.读研.工作之初.直到现在.我将分四个小乐章,分享写作给我的生命带来的影响和感动. 第一乐章:治疗与励志 说起写作的缘由,虽然可以追溯到初高中时读过的一点文 ...

  6. flask 单个页面多个表单(单视图处理、多视图处理)

    单个页面多个表单 除了在单个表单上实现多个提交按钮,有时还需要在单个页面上创建多个表单.比如,在程序的主页上同时添加登录和注册表单.当在同一个页面上添加多个表单时,我们需要解决的问题是在视图函数中判断 ...

  7. Linux基础命令---IP路由操作

    ip ip指令可以显示或操作路由.网路设备,设置路由策略和通道. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.SUSE.openSUSE.Fedora.   1.语法     ...

  8. SEO三种职位类型:编辑型SEO、技术型SEO、营销型SEO详解

    SEO三种职位类型:编辑型SEO.技术型SEO.营销型SEO详解 网站SEO优化作为营销端的服务之一,这些年也呈现出日新月异的格局.一改过去游兵散将式的小作坊生产模式,不断有力量强大的公司团体加入到这 ...

  9. window、linux安装jdk,excel 导入oracle,WebService,window 端口查看,svn服务安装,oracle用户解锁

    内存泄露分析插件http://download.eclipse.org/mat/1.3/update-site/birt插件http://download.eclipse.org//birt/upda ...

  10. JustOj 1414: 潘神的排序

    题目描述 老潘,袁少,小艾都是江理的大个子,他们想按身高排队,现在给你他们的身高,请你算出队伍中站在第二的有多高. 输入 输入三个整数,分别表示三个人的身高.(单位:纳米) 输出 输出身高排第二的身高 ...