python面向对象的三大特性:

  多态,封装,继承

多态:

  在不知道对象到底是什么类型、又想对其做一些操作时,就会用到多态

  如

'abc'.count('a')    #对字符串使用count函数返回a的数量
['a','b','c'].count('a') #对列表使用count返回a的数量

  类型虽然不同,但是都可以调用count()来实现同样的目的,这就是多态。

  毁掉多态:

    一些类型检查会毁掉多态,如type isinstance issubclass等等。

    实际上应该尽量少用这些,而多用多态。

创建自己的类

class Person:
def setname(self, name):
self.name = name
def getname(self):
return self.name #Person类有两个方法,setname和getname #每个方法都要默认有一个参数,代表对象自身,所以习惯叫他self变量
p = Person()
p.setname('lipijin')
#这里p是Person类的对象,调用该类的色他那么方法时,首先将p这个对象自身传给了self
#下面的操作实现同样的效果
Person.setname(p,'lipijin') #这里手动给self变量传参p

类的私有(类似Java的private):

  首先要知道,python中没有真正的private支持,但可以用如下方式模拟私有:

  

#在方法名前面加上两个下划线
class Person:
def setname(self,name):
self.name = name
def __getname(self):
return self.name #这里表示在对象外部是不能访问getname()方法的

  不过,这只是一般理解的不能访问,用dir()函数看一下就知道了:

  dir(Person)

  会发现其实__getname()被'翻译'成了 _类名__方法名,所以上面的可以这样访问:

  p._Person__getname()

  另一种方式也有他的实际效果,就是把双下划线改为但下划线,这样的名字不会被from xx import *这样的语句导入

继承:

  在类名后面加上括号,括上所要继承的类

  class A:

    pass

  class B(A):

    #B继承直自A,B是子类,A是父类

    pass

调查继承:

  虽然叫调查,实际类似 in 关键字:

  issubclass(son, father)  检查son是否是father的子类

  son.__bases__ 会以元组的形式返回son的父亲们,这里透露出python的多继承,实际我不是很喜欢多继承,乱伦......,实际也建议少用,难写更难调试。

  isinstance(obj, class)查看对象是否隶属于某个类

  实际上应该多使用多态,上用isinstance这写类型检查,会破坏多态

python 零散记录(七)(上) 面向对象 类 类的私有化的更多相关文章

  1. python 零散记录(七)(下) 新式类 旧式类 多继承 mro 类属性 对象属性

    python新式类 旧式类: python2.2之前的类称为旧式类,之后的为新式类.在各自版本中默认声明的类就是各自的新式类或旧式类,但在2.2中声明新式类要手动标明: 这是旧式类为了声明为新式类的方 ...

  2. Python学习(七)面向对象 ——类和实例

    Python 面向对象 —— 类和实例 类 虽然 Python 是解释性语言,但是它是面向对象的,能够进行对象编程.至于何为面向对象,在此就不详说了.面向对象程序设计本身就很值得深入学习,如要了解,请 ...

  3. Python记录14:面向对象编程 类和对象

    '''现在主流的编程思想有两种,一种是面向对象,一种是面向过程面向过程编程 核心是过程二字,过程指的是解决问题的步骤,即先干什么.再干什么.最后干什么... 基于该思想编写程序就好比再设计一条流水线, ...

  4. Spring-Security (学习记录七)--实现FilterInvocationSecurityMetadataSource的类将无法切入声明式事物

    目录 1 查看继承关系 2 说明 3 查看源码: 实现了FilterInvocationSecurityMetadataSource 的类将无法切入声明式事物. 原因: 1 查看继承关系 先查看Fil ...

  5. Python学习(七)面向对象 ——继承和多态

    Python 类的继承和多态 Python 类的继承 在OOP(Object Oriented Programming)程序设计中,当我们定义一个class的时候,可以从某个现有的class 继承,新 ...

  6. Python学习(七)面向对象 ——封装

    Python 类的封装 承接上一节,学了Student类的定义及实例化,每个实例都拥有各自的name和score.现在若需要打印一个学生的成绩,可定义函数 print_score() 该函数为类外的函 ...

  7. python 零散记录(五) import的几种方式 序列解包 条件和循环 强调getattr内建函数

    用import关键字导入模块的几种方式: #python是自解释的,不必多说,代码本身就是人可读的 import xxx from xxx import xxx from xxx import xx1 ...

  8. python 零散记录(三) 格式化字符串 字符串相关方法

    使用 % 符号格式化字符串: """常用转换说明符:""" #%s: 按照str()方式转换 #%r: 按照repr()方式转换 #%d: ...

  9. python 零散记录(二) 序列的相关操作 相加 相乘 改变 复制

    序列相加: [1,2] + [3,4] == [1,2,3,4] #字符串也是序列的一种 'hello' + 'world' == 'hello world' #但是序列相加只限于相同类型的序列间相加 ...

随机推荐

  1. 01_根据Id查询User的数据

    [工程目录] [数据库表中内容 user表] [sqlMapConfig.xml配置文件主要内容] 简述:sqlMapConfig.xml配置文件主要有两个作用: 1.配置和数据连接的相关信息,例如事 ...

  2. PAT_1026 程序运行时间

    问题描述: 要获得一个C语言程序的运行时间,常用的方法是调用头文件time.h,其中提供了clock()函数,可以捕捉从程序开始运行到clock()被调用时所耗费的时间.这个时间单位是clock ti ...

  3. 解决UIScrollView 的点击事件

    目前有两种方法 第一种 通过 Category 扩展 UIScrollView 对象,添加触摸事件,(不建议,后续扩展不方便)代码如下 @implementation UIScrollView (Ex ...

  4. 【实习记】2014-08-29算法学习Boyer-Moore和最长公共子串(LCS)

        昨天的问题方案一:寻找hash函数,可行性极低.方案二:载入内存,维护成一个守护进程的服务.难度比较大.方案三:使用前5位来索引,由前3位增至前5位唯一性,理论上是分拆记录扩大100倍,但可以 ...

  5. sed工具使用

    sed命令使用形式 1.sed命令从管道中读取数据处理 command | sed ' edit command' 通过管道把一个命令的标准输出读入到sed的标准输入,sed就起到了过滤作用 2.se ...

  6. jQuery插件综合应用(一)注册

    一.介绍 注册和登录是每个稍微有点规模的网站就应该有的功能.登陆功能与注册功能类似,也比注册功能要简单些.所以本文就以注册来说明jQuery插件的应用. jQuery插件的使用非常简单,如果只按照jQ ...

  7. WORDPRESS插件开发学习(一)HELLO WORLD

    WORDPRESS插件开发学习系列文章第一篇,在每篇文章的后面追加固定的字符“Hello World” 一.打开wordpress目录->wp-content->plugins 二.在pl ...

  8. datatables完整的增删改查

    1.需要指定datatables的ID <button class="btn btn-primary" id="newAttribute">新增证照 ...

  9. 经典的C程序

    程序一:打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数 #include<stdio.h> void main(){ int a, b, c, i; ; ...

  10. Tomcat基础教程(四)

    一.将Web应用部署到Tomcat中 为什么要部署?将Web应用部署到Tomcat中,那么Tomcat就能找到相应的Web应用,当Tomcat启动时就会加载和初始化Web应用,而在Tomcat启动后, ...