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. Library string type(2)——关于String的操作

    关于string的定义,请参阅博文http://blog.csdn.net/larry233/article/details/51483827 string的操作 s.empty() //Return ...

  2. 使用link在两个容器之间建立连接(mysql)

    在使用Docker的时候我们会常常碰到这么一种应用,就是我需要两个或多个容器,其中某些容器需要使用另外一些容器提供的服务.比如这么一种情况:我们需要一个容器来提供mysql的数据库服务,而另外两个容器 ...

  3. c#NPOI导出

    按行列导出数据: HSSFWorkbook hssfworkbook = new HSSFWorkbook(); //命名空间:using NPOI.HSSF.UserModel; Sheet she ...

  4. 【转】PL/SQL Developer使用技巧、快捷键

    原文链接:PL/SQL Developer使用技巧.快捷键 1.类SQL PLUS窗口:File->New->Command Window,这个类似于oracle的客户端工具sql plu ...

  5. javascript 老王开车去东北

    [Decode error - output not utf-8] 魔女 飞 奔驰 去 华南 [Finished in 1.1s] 需要变化的对象进行隔离.正是编程的乐趣之处 /** * by Jac ...

  6. 网站加载有商务通、商桥,定义js函数触发快商通代码

    有的网站已经加载了商务通.商桥的,前期定义了js函数 触发商务通.商桥代码的,可以重新定义新的函数对之前的函数进行覆盖,其 js代码为: var domain = document.domain; / ...

  7. Checbox的操作含已选、未选及判断代码

    Checbox的操作包括已选.未选.判断等等,下面有个不错的示例,使用jquery完成,感兴趣的朋友可以参考下 $("#chk1").attr("checked" ...

  8. C++引用之引用的使用

    一旦一个引用被声明,则该引用名就只能作为目标变量名的一个别名来使用,所以,不能再把该引用名作为其他变量名的别名,任何对该引用的赋值就是对该引用对应的目标变量名的赋值. 对引用求地址就是对目标变量求地址 ...

  9. 【C#】动态加载dll程序集

    原文:http://www.cnblogs.com/bomo/archive/2013/03/01/2938165.html 很多时候我们需要用到引用其他程序集,有些程序集是.Net生成的,可以支持反 ...

  10. csu 10月 月赛 J 题

    Description CSU又到了一年中评奖学金的时候了……各大学霸都或多或少地拿到了各种奖学金(你们自己看着办吧). 在这里,评奖学金有个很奇怪的规矩——每个同学得到的奖学金数一定满足相邻的两个非 ...