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. C# Unix时间戳转换为时间

    在做一些接口的时候,比如返回数据中有一个时间的属性,它的值是使用Unix时间戳表示的,当我们处理它(保存到本地或者格式化前台展示)时需要转换成日期时间,在此就需要根据时间戳转换为日期时间 (注:Uni ...

  2. cocos2d-x v3.0的window平台搭建和编译成andriod程序

    首先添加这个地址到系统环境变量,path 然后打开CMD,输入如下语句 现在就可以创建一个新项目了 这样一个空的cocos2d-x v3.0的项目就创建好了 接下来编译andriod程序 先在系统环境 ...

  3. C++ map插入(insert)数据返回值

    例子: typedef boost::unordered_map<int, int> UserOnlineMap; UserOnlineMap userOnlineMap_; std::p ...

  4. mysql 5.7安装脚本

    [root@HE2 ~]# cat mysql_auto_install.sh ###### 二进制自动安装数据库脚本root密码MANAGER将脚本和安装包放在/root目录即可########## ...

  5. 如何在Ubuntu上创建及管理LXC容器?

    将LXC安装到Ubuntu上 $ sudo apt-get install lxc 安装完毕之后,运行lxc-checkconifg工具,检查当前Linux内核支持LXC的情况.要是一切都已被启用,内 ...

  6. 限制apache错误日志大小

    ①配置错误日志 在http.conf配置: ErrorLog "| /opt/lampp/bin/rotatelogs /opt/lampp/logs/%Y_%m_%d_error_log  ...

  7. php tpl 模板页面如和给js文件传参数

    有一个参数,服务器传给了php 模板页面,但模板包含的js需要得到这个参数值.如何处理: 一,在引入页面前加一句代码 <script type="text/javascript&quo ...

  8. python 三分钟入门

    1.Python环境配置(2.7版本): Python官网:https://www.python.org/ Pycharm官网 http://www.jetbrains.com/pycharm/dow ...

  9. DSP:CCS V6 TMS320F2812 使用printf函数

    使用Code Composer Studio  Version: 6.1.1.00022,建立TMS320F2812工程. /* * main.c */ #include <stdio.h> ...

  10. VMware网络选项分析

    摘自资料:VMware网卡选项分析.zip 很多朋友都曾问到关于Guest和Host互联,其实这并不是一件困难的事情,只要能够理解VMware的网络模型即可,今天结合着我的虚拟机,来详细介绍一下VMw ...