一、面向对象

类的设计:在程序开发中,要设计一个类,通常需要满足以下三个要求:

1、类名  这类事物的名字,满足大驼峰命名法

2、属性 这类事物具有什么样的特征

3、 方法  这类事物具有什么样的行为

eg:小明今年18岁,身高1.75,每天早上要跑步,会去吃东西

类名:Person()  属性:name,age,height    方法:run() eat()

(1)

# 小猫爱吃鱼,小猫要喝水

class  Cat():

def eat(self):

print '小猫爱吃鱼'

def  drink(self):

print '小猫要喝水'

tom = Cat()     # 创建猫对象

tom.eat()

tom.drink()

# 小狗爱睡觉,小狗爱吃肉

class  Dog():

def sleep(self):

print '小狗爱睡觉'

def eat(self):

print '小狗爱吃肉'

xiaoxiao = Dog()

xiaoxiao.sleep()

xiaoxiao.eat()

(2)

class  Dog():

def sleep(self):

print '小狗爱睡觉'

def eat(self):

print '小狗爱吃肉'

xiaoxiao = Dog()

xiaoxiao.name = 'xiaoxiao'

xiaoxiao.sleep()

xiaoxiao.eat()

print xiaoxiao

# addr = id(xiaoxiao)

# print '%x' %addr

# print '%d' %addr

#再创建一个狗对象

benben = Dog()

benben.name = 'benben'

benben.eat()

benben.sleep()

print  benben

(3)

初始化方法

我们已经知道了使用类名() 就可以创建一个对象

当使用类名()创建对象时,python的解释器会自动执行以下操作:

1、为对象在内存中分配空间 --创建对象

2、调用初始化方法为对象的属性设置初始值   初始化方法(__init__)这个初始化方法就是__init__方法,是对象的内置方法

专门是用来定义一个类具有那些属性的方法

class  Dog():

def  __init__(self,new_name):

self.name = new_name

def sleep(self):

print '%s 爱睡觉'  % self.name

xiaoxiao = Dog('xiaoxiao')   # 使用类名()创建对象的时候,会自动调用初始化方法__init__

print xiaoxiao.name

xiaoxiao.sleep()

benben = Dog('benben')

benben.sleep()

二、内置方法

(1)__del__

1、在python中

当使用类名()创建对象时,为对象分配万空间后,自动调用__init__

当一个对象被从内存中销毁前,会自动调用__del__方法

"""

class Dog():

def __init__(self,new_name):

self.name = new_name

print '%s 来了' %self.name

def __del__(self):

print '%s 走了' %self.name

xiaoxiao = Dog('xiaoxiao')

print xiaoxiao.name

print '_' * 50

2、

class Dog():

def __init__(self,new_name):

self.name = new_name

print '%s 来了' %self.name

def __del__(self):

print '%s 走了' %self.name

xiaoxiao = Dog('xiaoxiao')

print xiaoxiao.name

del xiaoxiao

print '_' * 50

(2)__str__

1、在python中,使用python输出对象变量

默认情况下,会输出这个变量引用的对象是由哪一个类创建的对象

以及在内存中的地址(十六进制表示)

如果在开发中,希望使用print输出对象变量时

能够打印自定义的内容,就可以利用__str__这个内置方法了

"""

class Dog():

def __init__(self,name):

self.name = name

tom = Dog('tom')

print tom

2、

class Dog():

def __init__(self,name):

self.name = name

def __str__(self): #必须返回一个字符串

return '我是%s' %self.name

tom = Dog('tom')

print tom

三、封装

1、封装是面向对象编程的一大特点

2、面向对象编程的第一步,将属性和方法封装到一个抽象的类中

3、外界使用类创建对象,然后让对象调用方法

4、对象方法的细节都被封装在类的内部

(1)

需求:

1、tom和xiaoxiao都爱吃东西爱跑步

2、tom体重75

3、xiaoxiao体重50

4、每次跑步都会减少0.5公斤

5、每次吃东西都会增加1公斤

"""

class person():

def __init__(self, name,weight):

self.name = name

self.weight =weight

def __str__(self):

return '我的名字叫%s,体重是%.2f' %(self.name,self.weight)

def  run(self):

print '%s 爱跑步' % self.name

self.weight -= 0.5    # 在对象的方法内部,是可以直接访问对象的属性

def  eat(self):

print '%s 爱吃' % self.name

self.weight += 1.0

tom = person('tom',75.0)

tom.run()

tom.eat()

print tom

xiaoxiao = person('xiaoxiao',50.0)

xiaoxiao.run()

xiaoxiao.eat()

print xiaoxiao

(2)

需求:

1、房子有户型,总面积和家具名称列表

新房子没有任何的家具

2、家具有名字和占地面积,其中

床:占4平方

衣柜:占2平方

餐桌:占1.5平方

3、将以上三件家具添加到房子中

4、打印房子时,要求输出:户型,总面积,剩余面积,家具名称列表

"""

class  HouseItem():

def __init__(self, name,square):

self.name = name

self.square = square

def __str__(self): #必须返回一个字符串

return '%s的占地面积为%.2f' %(self.name,self.square)

chuang= HouseItem ('chuang',4)

print chuang

yigui = HouseItem('yigui',2)

print yigui

canzhuo =HouseItem('canzhuo',1.5)

class  House():

def __init__(self,huxing,square):

self.huxing = huxing

self.square = square

self.free_square = square   # 剩余面积

self.item_list = []         # 家具名称列表

def __str__(self):

return '户型:%s\n总面积:%.2f\n剩余面积:%.2f\n家具列表:%s' % (self.huxing,self.square,self.free_square,self.item_list)

def  add_item(self,item):

print '要添加的家具%s' % item

if item.square > self.free_square:

print '%s面积太大无法添加' %item.square

return

self.item_list.append(item.name)

self.free_square -=item.square

my_home = House('两室一厅',180)  # 创建房子

# 添加家具

my_home.add_item(chuang)

my_home.add_item(yigui)

my_home.add_item(canzhuo)

print my_home

(3)

1、士兵瑞恩有一把AK47

2、士兵可以开火

3、枪能够发射子弹

4、枪能够装填子弹(增加子弹的数量)

class  Gun():

def __init__(self,model):

self.model = model  #  枪的型号

self.bullet_count = 0   #子弹的数量

def  add_bullet(self,count):

self.bullet_count += count

def shoot(self):

if self.bullet_count <= 0:  #  判断子弹的数量

print '没有子弹了'

self.bullet_count -= 1   #发射子弹

print '%s 突突突 %d' %(self.model,self.bullet_count)

class  Soldier():

def  __init__(self,name):

self.name = name

self.gun = None

def fire(self):

if self.gun == None:

print  '%s没有枪' %self.name

return

print 'go!!!'

self.gun.add_bullet(50)

self.gun.shoot()

ak47 = Gun('ak47')

ak47.add_bullet(50)

ak47.shoot()

ryan = Soldier('Ryan')

ryan.gun = ak47

ryan.fire()

print  ryan.gun

linux 封装python,基于linux下python学习(封装)相关推荐

  1. [Python+Anaconda] 查看Python、Anaconda下python、CUDA、函数库的版本

    查看Python.Anaconda下Python.CUDA.函数库的版本 前言 第三方库(比如Pytorch)要依赖Python版本,CUDA版本,对于不同的版本组合,会有不同的安装命令. 这就要求我 ...

  2. 英语教师计算机研修总结报告,第四组“基于信息技术下深度学习的英语课堂教学研究”工作总结...

    鱼峰区2018-2019学年度上学期小学英语学科 "基于信息技术下深度学习的英语课堂教学研究"工作总结 鱼峰区小学英语课题第四组在我区<基于区域教研组的英语课堂教学行动研究& ...

  3. 基于vivado下pcie dma封装的pcie接口程序

    基于vivado下pcie dma封装的pcie接口程序 ID:81450656125284940

  4. linux 切换python版本_Linux下python默认版本切换成替代版本(示例代码)

    当你安装 Debian Linux 时,安装过程有可能同时为你提供多个可用的 Python 版本,因此系统中会存在多个 Python 的可执行二进制文件.你可以按照以下方法使用 ls 命令来查看你的系 ...

  5. linux python乱码_linux下python中文乱码解决方案详解

    linux下python中文乱码解决方案详解 发布时间:2020-09-06 20:24:49 来源:脚本之家 阅读:68 1. 场景描述 linux服务器下安装了Anaconda3,执行Pyhton ...

  6. linux开机自启动python脚本_Linux下Python脚本自启动和定时启动的详细步骤

    一.Python开机自动运行 假如Python自启动脚本为 auto.py .那么用root权限编辑以下文件: sudo vim /etc/rc.local 如果没有 rc.local 请看 这篇文章 ...

  7. linux中python编译器_linux下python编译器

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! linux下默认系统自带python2.6的版本,这个版本被系统很多程序所依赖, ...

  8. 如何学习修改linux系统固件,基于Linux的固件,如何实现更新的好方法?

    我正在使用alix 2d13开发基于linux的设备. 我开发了一个脚本,负责创建映像文件,创建分区,安装引导加载程序(syslinux),内核和initrd,并注意将根文件系统文件放入正确的分区. ...

  9. 基于linux环境pdf,基于Linux环境下的Snif论r设计与芸}瑰.PDF

    基于Linux环境下的Snif论r设计与芸}瑰 基于Linux环境下的Snif论r设计与芸}瑰 李刍每莹周姆 铬编程技I:,夏‰骼r实现方法进行了棵耐 7IP.w.h 关键词嗅挺器,滑动窗口,'r(: ...

最新文章

  1. 无法打开此程序因为计算机丢失,解决X-Scan安装后“无法启动此程序,因为计算机丢失NPPTools.dll”...
  2. Jupyter 服务开发指南
  3. 【计算理论】计算复杂性 ( 算法复杂度标记 | 渐进上界 | 大 O 记号 | 常用的渐进上界 )
  4. Nginx + Node + Vue 部署初试(修改)
  5. 【springboot中使用拦截器】
  6. 消息推送平台高可用实践(下)
  7. YouTube将关闭原创节目部门
  8. 黑苹果论坛被封_给掌上电脑装上黑苹果,买到的人都觉得赚大了
  9. 用python实现遗传算法
  10. matlab电气教程下载,Matlab 2020b介绍及下载安装步骤
  11. 原生ajax调用,JavaScript进阶之原生AJAX接口请求的方式
  12. 位图保存到数据库 VC ado 类
  13. 计算机进入桌面黑屏怎么办,电脑进入桌面后黑屏如何修复 电脑经常进入桌面之后黑屏的处理方法...
  14. swift - enumerated()
  15. 钓鱼网站+邮件诈骗 实例分析
  16. typedef和define
  17. python如何定义一个函数选择题_Python逻辑题(以下10个选择题有唯一答案,请编写自定义函数judge遍历答案列表并报告正确答案),python,道,汇报...
  18. [基础算法] 并查集
  19. docker下安装kong和konga
  20. 手工删除Windows桌面搜索的方法

热门文章

  1. HashMap的四种访问方式
  2. 数组洗牌 Fisher Yates
  3. 继 承(面向对象特征之一)
  4. (转)CentOS分区操作详解
  5. SQL 字符串分割表函数
  6. 关于常用meta的总结
  7. 你疏漏的 JS 函数硬核知识?这里帮你总结了
  8. MUI H5+ 开发app基础
  9. javascript --- 实战中体会jsonp
  10. 开源数据库中间件-MyCa初探与分片实践