一、 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. 路径遍历:ZIP条目覆盖

    程序在解压zip文件时,如果没有验证zip条目,攻击者可能对条目覆盖,从而造成路径遍历 例如:以下代码示例解压zip文件.    static final int BUFFER = 512;    / ...

  2. [转-SSRF]什么是SSRF

    这些天专注了解了SSRF攻击(Server-side Request Forgery,服务器端请求伪造),对这类攻击有了自己的一些总结与看法,老外取这个名字是挺不错的,我很喜欢,这让我想到了CSRF( ...

  3. Hive自定义函数UDF和UDTF

    UDF(user defined functions) 用于处理单行数据,并生成单个数据行. PS: l 一个普通UDF必须继承自“org.apache.hadoop.hive.ql.exec.UDF ...

  4. 一个tomcat下,两个系统的jar包可以相互引用。

    将道路挖占管理系统(rems)从交通设备设施系统(tms)中剥离出去以后,在本地调试的时候是在同一个Tomcat下启动的,上传文件成功. 然后部署到西安以后,分成两个tomcat以后,发现rems上传 ...

  5. 字符串转化为int数组

    String a = "1,2,3,4,5,6" String str[] = a.split(","); int array[] = new int[str. ...

  6. es6generator

    yield语句 由于Generator函数返回的遍历器对象,只有调用next方法才会遍历下一个内部状态,所以其实提供了一种可以暂停执行的函数.yield语句就是暂停标志. yield语句只能用在 Ge ...

  7. C++/JAVA/C#子类调用父类函数情况[留存]

    时间久了就容易记不清了,特留存备用查看 c++ 1.构造函数调用   常用初始化列表  或者显示调用 1.1同一个类中构造函数调用构造函数   尽量不要这样做,因为结果不确定!避免麻烦(C++11增加 ...

  8. 八 原型prototype和__proto__

    先来看一个实例 function Foo() { } var foo = new Foo(); console.log(foo.prototype);// undefined console.log( ...

  9. Nginx技术研究系列6-配置详解

    前两篇文章介绍了Nginx反向代理和动态路由: Ngnix技术研究系列1-通过应用场景看Nginx的反向代理 Ngnix技术研究系列2-基于Redis实现动态路由 随着研究的深入,很重要的一点就是了解 ...

  10. Factory Method

    Question:Based on the previous article,what could you do if we must add an extra  function? For exam ...