一、 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. shell基础:1.1脚本执行方式

    echo 后边跟的东西有空格,那么需要加上单引号或双引号.!是有特殊含义的,用单引号原意. 尽管linux不区分文件的后缀,但还是要写上以便于区分. #!Bash    这行不是注释,也不能省略,他的 ...

  2. sqli-labs(二)

    第二关:sqli-labs的第二关是有报错信息的int类型的sql注入,输入id=1'后也会报错,如下图 可以看到报错信息种显示的是'' limit 0,1'  这处有错,其中前后两个单引符号是报错信 ...

  3. Linux SSH 免秘钥登录

    SSH 免秘钥登录 ssh:是一种安全加密协议 ssh  username@hostname     ssh gongziyuan.com:以当前用户登录该机器(如果不是当前用户,需要这么干:ssh ...

  4. python时间和日期

    一.time 和 calendar 模块可以用于格式化日期和时间 import time; # 引入time模块 ticks = time.time() print "当前时间戳为:&quo ...

  5. spark 关联source

    IDEA就自动把jar包中的字节码反编译为Java源码,并且,我们可以直接下个断点调试程序,但是对于Scala,IDEA的反编译效果并不是很好,如下图所示: 2)提示“Source not found ...

  6. 基于MySQL提供的Yum repository安装MySQL5.6

    基于MySQL提供的Yum repository安装MySQL5.6 1:下载YUM包 1.1切换到root用户: 1)su - root 2)wget http://dev.mysql.com/ge ...

  7. Lua之math

    Lua之math函数: 转载请注明出处:http://www.cnblogs.com/jietian331/p/8032555.html abs 取绝对值 math.abs(-15) 15 acos ...

  8. django user 权限

     Django中的Users权限系统 2011-05-21 15:04:33 分类: Python/Ruby 权限系统包含1.用户2.权限(判断一个用户是否有特定的操作权限yes/no)3.组4.消息 ...

  9. Java多线程-----理解CountDownLatch

       CountDownLatch简介  CountDownLatch是在java1.5被引入的,跟它一起被引入的并发工具类还有CyclicBarrier.Semaphore.ConcurrentHa ...

  10. kalinux 五笔安装

    1.输入命令 sudo apt-get install fcitx-table-wubi 2.配置,找到这个fcitx配置,运行,把五笔调到第2个 3.reboot重启系统