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. STL unique使用问题

    string strs[] = {"one","one","two","three","three" ...

  2. ASP.NET获取上传图片的大小

    1.采用客户端javascript可以取得图片大小 <input id="FileUpload" type="file" size="30&qu ...

  3. [Caffe] ubuntu14.04下使用OpenBLAS加速Caffe

    一.apt安装 sudo apt-get install libopenblas-dev 二.手动从source安装 1. 下载OpenBLAS并编译 git clone https://github ...

  4. 项目规范和建立-从frozenui学习

    1.分支branches开发新功能,主干trunk是稳定发布的.因为frozenui下载完,看到branches比trunk多了一个版本 2.版本号定义,主版本.次版本.修订号 大版本号: 主版本号: ...

  5. yii2源码学习笔记(十四)

    Module类是模块和应用类的基类. yiisoft\yii2\base\Module.php <?php /** * @link http://www.yiiframework.com/ * ...

  6. netbeans git 配置(ssh方式)

    git出问题了,自己又重新配置了下git. 参考文章: https://netbeans.org/kb/docs/ide/git_zh_CN.html#github

  7. hdu-A+B问题,大数加法

    格式问题很头疼啊 Input The first line of the input contains an integer T(1<=T<=20) which means the num ...

  8. MINA的session.close

    现象:客户端session.close之后,并没有提出,客户端程序一直hold在那里: 解决:调用了session.getService().dispose(false)方法后,客户端程序完成了退出 ...

  9. asp.net core 认证及简单集群

    众所周知,在Asp.net WebAPI中,认证是通过AuthenticationFilter过滤器实现的,我们通常的做法是自定义AuthenticationFilter,实现认证逻辑,认证通过,继续 ...

  10. 一些嵌入式和FPGA相关模块的开源

    工作一年,整理下手头做过的东西,分享出来,希望能帮到大家. 嵌入式方面,主要集中在Xilinx家的器件上,ZYNQ居多.Linux相关的就不贴了,网上的资料太多,xilinx-wiki上资料都是比较全 ...