python 面向对象(其一)

面向对象基本释义

  • 对象: 具有一系列属性方法的集合
  • 举例:

    ---------------------------------------同学小明
    --------------------属性----------------
    名字: 小明
    父亲:(未知)
    母亲:(未知)
    性别:男
    年龄:15
    --------------------方法----------------
    滚出去: 调用此方法可以让小明滚出教室
    闭嘴: 调用此方法可以让小明闭嘴
    告密:(仅老师可用)
    写给阿花从未寄出去的表白信:(仅自己可知)
  • 属性说明:

    • 小明的名字、年龄、性别,对外可见,就是public属性;
    • 小明的父亲、母亲对外不可见,只有小明知道,这个就是private属性;
    • 如果小明还有兄弟姐妹,那么父亲、母亲这两个属性对兄弟姐妹父母都是可见的,这个就是protected属性,即有选择范围的对外可见
      • 一般情况下指的是同一个package范围
  • 方法说明:
    • 滚出去、闭嘴这两个是任何人可以对小明进行调用的方法,默认public
    • 告密是只有指定的人才可以调用,即选择性开放,一般为proteced
    • 从未寄出去的表百姓,就是私有方法,除了自己谁都不知道,private
说明:
1. Python中默认是没有proteced属性的,而且共有私有之间隔离并不是完全绝对
2. Python中所有类型默认都是对象形式组织

面向对象在类中的体现

上面说的小明,用代码表述出来就是:

 1 #! coding:utf-8
 2 # object是对象类,也是python种一切对象的父类;所有的类型都显示/隐式的继承自object
 3 # 平时使用时,可以直接写class XiaoMing
 4 class XiaoMing(object):
 5
 6     name = "小明"
 7     age = 15
 8     gender = "男"
 9
10     __father = "father_of_xiaoming"
11     __mother = "mother_of_xiaoming"
12
13     def __init__(self, relationship):
14         self.relationship = relationship
15
16     def goOut(self):
17         '''
18             小明滚出去
19         '''
20         print "Xiaoming, your %s let you go out"%self.relationship
21
22     def shutUp(self):
23         '''
24             小明闭嘴
25         '''
26         print "Xiaoming, your %s let you shut up"%self.relationship
27
28     # python没有proteced,默认为同一个package可以直接调用
29     def gaoMi(self):
30         '''
31             告密
32         '''
33         pass
34
35     #私有方法,开头方式是这样
36     def __sayLove(self):
37         '''
38             写一封不敢寄出去的情书,唉,少年应许多情
39         '''
40         print "%s, you should not watch it!"%self.relationship

小明这个类的使用过程是这样的

#实例化一个对象
xiaoming = XiaoMing("dude")
print xiaoming.name
print xiaoming.age
print xiaoming.gender
xiaoming.goOut()
xiaoming.shutUp()
xiaoming.gaoMi()# ======output======== #
# 小明
# 15
# 男
# Xiaoming, your dude let you go out
# Xiaoming, your dude let you shut up

Python中对象的应用

在python中可以通过dir(obj)来查看每个对象当前可用的属性和方法,如:

print dir(xiaoming)# ======output======== #
#['_XiaoMing__father', '_XiaoMing__mother', '_XiaoMing__sayLove', '__doc__', '__init__', '__module__', 'age', 'gaoMi', 'gender', 'goOut', 'name', 'relationship', 'shutUp']

上面例子中,注意_XiaoMing__father_XiaoMing__mother,这两个属性为私有变量__father、__mother的外部调用方式,如下:

print xiaoming._XiaoMing__father
# ======output======== #
# father_of_xiaoming

python中一切皆对象,凡是对象都可以用dir(obj)来查看属性方法,可以试试

类继承与重构

小明长大变超人了!

    ---------------------------------------超人小明--------------------属性----------------年龄:30   必杀技:镭射光线!biubiu!--------------------方法----------------滚出去: 谁敢叫本超人滚出去,站出来试试!告密:已经不需要告密了写给老婆阿芳的家信:暗恋的人最终没有成为自己的老婆啊
  • 属性说明:

    • 超人小明仍然具备同学小明的一切属性,除了年龄在长大
    • 超人小明有了自己的必杀技,毕竟是超人嘛
  • 方法说明:
    • 滚出去:现如今哪个不怕死的敢让超人滚出去
    • 告密:那些黑历史怎么可能重提
    • 写给老婆阿芳的家信:心里也继续暗恋阿花,但毕竟有了自己的老婆了

如上,超人小明是同学小明后续的一个可能,也就是扩展子类,用代码描述为:

#! coding:utf-8
class SuperManXiaoMing(XiaoMing):action = "镭射光线!biubiu!"def __init__(self, relationship):super(SuperManXiaoMing, self).__init__(relationship)self.age = 30def goOut(self):print "现如今哪个不怕死的敢让超人滚出去! %s 你小子活腻歪了是吧!"%self.relationshipdef gaoMi(self):passdef loveToWife(self):print "阿芳,额想你!"

调用的例子为:

    superman = SuperManXiaoMing("dude")print superman.nameprint superman.ageprint superman.genderprint superman.actionsuperman.goOut()superman.shutUp()superman.gaoMi()superman.loveToWife()print dir(superman)print superman._XiaoMing__father# ======output======== #
# 小明
# 30
# 男
# 现如今哪个不怕死的敢让超人滚出去! dude 你小子活腻歪了是吧!
# Xiaoming, your dude let you shut up
# 阿芳,额想你!
# ['_XiaoMing__father', '_XiaoMing__mother', '_XiaoMing__sayLove', '__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'action', 'age', 'gaoMi', 'gender', 'goOut', 'loveToWife', 'name', 'relationship', 'shutUp']
# father_of_xiaoming

看,上述输出中,gaoMi没有输出,因为被pass了。其他父类子类的内容全在里面了。

思考1

  • 掌握上述知识可以做什么?
  • 继承父类,super(className, self).init() 和 ParentClass.init()区别是什么?
  • 类的使用场景有哪些?
  • 对测试而言,类的好处与不好处有哪些?

转载于:https://www.cnblogs.com/SilenceCity/p/pythonOO1.html

Python面向对象(其一)相关推荐

  1. python面向对象的优点_Python面向对象编程——总结面向对象的优点

    Python面向对象编程--总结面向对象的优点 一.从代码级别看面向对象 1.在没有学习类这个概念时,数据与功能是分离的 def exc1(host,port,db,charset): conn=co ...

  2. 这可能是Python面向对象编程的最佳实践

    作者 | 崔庆才 来源 | 进击的Coder(ID:FightingCoder) Python 是支持面向对象的,很多情况下使用面向对象编程会使得代码更加容易扩展,并且可维护性更高,但是如果你写的多了 ...

  3. 第八课.Python面向对象(二)

    类的继承和多态 继承和多态与函数有共同的目的,都是为了减少代码的冗余,提高复用的效率: 根据"Python面向对象(一)"的笔记,我现在定义一个Cinema类: #父类 class ...

  4. Python面向对象编程:类继承和其衍生术语

    Python面向对象编程03:类继承和其衍生术语 前面我们讲到过正则表达式字符等,上一篇分享了面向对象编程和类的结构,最后稍微提到了继承. Python面向对象编程:深度认识类class_ Pytho ...

  5. 《Python面向对象编程指南》——1.2 基类中的__init__()方法

    本节书摘来自异步社区<Python面向对象编程指南>一书中的第1章,第1.2节,作者[美]Steven F. Lott, 张心韬 兰亮 译,更多章节内容可以访问云栖社区"异步社区 ...

  6. Python 面向对象 基础

    编程范式概述: 面向过程 和 面向对象 以及函数式编程 面向过程:(Procedure Oriented)是一种以事件为中心的编程思想. 就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实 ...

  7. python面向对象类属性_python面向对象之类属性和类方法案例分析

    本文实例讲述了python面向对象之类属性和类方法.分享给大家供大家参考,具体如下: 目标 类的结构 类属性和实例属性 类方法和静态方法 01. 类的结构 1.1 术语 -- 实例 使用面相对象开发, ...

  8. 关于python面向对象编程中、下列说法中_关于Python面向对象编程的知识点总结

    前言 如果你以前没有接触过面向对象的编程语言,那你可能需要先了解一些面向对象语言的一些基本特征,在头脑里头形成一个基本的面向对象的概念,这样有助于你更容易的学习Python的面向对象编程. 接下来我们 ...

  9. python对象编程例子-这是我见过最详细的Python面向对象编程!建议收藏!

    原标题:这是我见过最详细的Python面向对象编程!建议收藏! 面向对象编程和函数式编程(面向过程编程)都是程序设计的方法,不过稍有区别. 面向过程编程: 1. 导入各种外部库 2. 设计各种全局变量 ...

  10. python面向对象编程的优点-Python面向对象编程——总结面向对象的优点

    Python面向对象编程--总结面向对象的优点 一.从代码级别看面向对象 1.在没有学习类这个概念时,数据与功能是分离的 def exc1(host,port,db,charset): conn=co ...

最新文章

  1. gradle 查看依赖类库版本_使用Gradle命令查看项目中库的依赖关系
  2. 聊聊rocketmq的RemotingException
  3. 【Web安全】通过机器学习破解验证码图片
  4. ubuntu如何安装linux驱动程序,Ubuntu下如何安装驱动程序和应用软件?
  5. html中井号的作用,html5 css选择器 井号, 句点的区别
  6. 进程控制1--fork vfork函数
  7. 华科团队发布 OVIS 遮挡视频实例分割基准数据集
  8. linux 下vim文件乱码 cat文件正常处理方法
  9. mongodb golang 批量更新_Mongodb读取数据缓慢问题-Sparkamp;Mongodb
  10. JavaScript学习之Object(下)this
  11. Oracle和Mysql的区别 转载
  12. CodeForces - 1384
  13. 跨平台移动开发平台Flutter环境搭建
  14. 【实例】python 使用beautifulSoup 抓取网页正文 以淘宝商品价格为例
  15. 平凉锅盔西北美食的文化的传承之一
  16. Python3 ——斐波那契数列(经典)
  17. python测试代码报错:Ran 0 test in 0.00s
  18. python二次方程_怎么用python解一元二次方程?
  19. Android P (9.0)刘海屏(DisplayCutout)适配方法
  20. 人工智能实战2019第七次作业(OpenPAI) 16721088 焦宇恒

热门文章

  1. PHP使用ltrim、rtrim以及trim处理中文时遇到的“坑”
  2. Linux Ubuntu安装netcdf4.4
  3. 【华为OD机试模拟题】用 C++ 实现 - 病菌感染(2023.Q1)
  4. SpringBoot+log4j2的思路记录,实现每天输出日志文件
  5. 2019年用于机器学习的50个最佳公共数据集
  6. 熊掌号php自动提交链接示例,织梦熊掌号api自动提交代码
  7. 美团背后的商业模式是什么?后疫情时代该走向何方?
  8. js简易计算器 黑马pink老师
  9. ico的使用和工具和生成
  10. DeepViT、DeiT、CaiT、T2T、Cross-ViT、PiT、LeViT、CvT算法整理