python 零散记录(七)(上) 面向对象 类 类的私有化
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 零散记录(七)(上) 面向对象 类 类的私有化的更多相关文章
- python 零散记录(七)(下) 新式类 旧式类 多继承 mro 类属性 对象属性
python新式类 旧式类: python2.2之前的类称为旧式类,之后的为新式类.在各自版本中默认声明的类就是各自的新式类或旧式类,但在2.2中声明新式类要手动标明: 这是旧式类为了声明为新式类的方 ...
- Python学习(七)面向对象 ——类和实例
Python 面向对象 —— 类和实例 类 虽然 Python 是解释性语言,但是它是面向对象的,能够进行对象编程.至于何为面向对象,在此就不详说了.面向对象程序设计本身就很值得深入学习,如要了解,请 ...
- Python记录14:面向对象编程 类和对象
'''现在主流的编程思想有两种,一种是面向对象,一种是面向过程面向过程编程 核心是过程二字,过程指的是解决问题的步骤,即先干什么.再干什么.最后干什么... 基于该思想编写程序就好比再设计一条流水线, ...
- Spring-Security (学习记录七)--实现FilterInvocationSecurityMetadataSource的类将无法切入声明式事物
目录 1 查看继承关系 2 说明 3 查看源码: 实现了FilterInvocationSecurityMetadataSource 的类将无法切入声明式事物. 原因: 1 查看继承关系 先查看Fil ...
- Python学习(七)面向对象 ——继承和多态
Python 类的继承和多态 Python 类的继承 在OOP(Object Oriented Programming)程序设计中,当我们定义一个class的时候,可以从某个现有的class 继承,新 ...
- Python学习(七)面向对象 ——封装
Python 类的封装 承接上一节,学了Student类的定义及实例化,每个实例都拥有各自的name和score.现在若需要打印一个学生的成绩,可定义函数 print_score() 该函数为类外的函 ...
- python 零散记录(五) import的几种方式 序列解包 条件和循环 强调getattr内建函数
用import关键字导入模块的几种方式: #python是自解释的,不必多说,代码本身就是人可读的 import xxx from xxx import xxx from xxx import xx1 ...
- python 零散记录(三) 格式化字符串 字符串相关方法
使用 % 符号格式化字符串: """常用转换说明符:""" #%s: 按照str()方式转换 #%r: 按照repr()方式转换 #%d: ...
- python 零散记录(二) 序列的相关操作 相加 相乘 改变 复制
序列相加: [1,2] + [3,4] == [1,2,3,4] #字符串也是序列的一种 'hello' + 'world' == 'hello world' #但是序列相加只限于相同类型的序列间相加 ...
随机推荐
- Library string type(2)——关于String的操作
关于string的定义,请参阅博文http://blog.csdn.net/larry233/article/details/51483827 string的操作 s.empty() //Return ...
- 使用link在两个容器之间建立连接(mysql)
在使用Docker的时候我们会常常碰到这么一种应用,就是我需要两个或多个容器,其中某些容器需要使用另外一些容器提供的服务.比如这么一种情况:我们需要一个容器来提供mysql的数据库服务,而另外两个容器 ...
- c#NPOI导出
按行列导出数据: HSSFWorkbook hssfworkbook = new HSSFWorkbook(); //命名空间:using NPOI.HSSF.UserModel; Sheet she ...
- 【转】PL/SQL Developer使用技巧、快捷键
原文链接:PL/SQL Developer使用技巧.快捷键 1.类SQL PLUS窗口:File->New->Command Window,这个类似于oracle的客户端工具sql plu ...
- javascript 老王开车去东北
[Decode error - output not utf-8] 魔女 飞 奔驰 去 华南 [Finished in 1.1s] 需要变化的对象进行隔离.正是编程的乐趣之处 /** * by Jac ...
- 网站加载有商务通、商桥,定义js函数触发快商通代码
有的网站已经加载了商务通.商桥的,前期定义了js函数 触发商务通.商桥代码的,可以重新定义新的函数对之前的函数进行覆盖,其 js代码为: var domain = document.domain; / ...
- Checbox的操作含已选、未选及判断代码
Checbox的操作包括已选.未选.判断等等,下面有个不错的示例,使用jquery完成,感兴趣的朋友可以参考下 $("#chk1").attr("checked" ...
- C++引用之引用的使用
一旦一个引用被声明,则该引用名就只能作为目标变量名的一个别名来使用,所以,不能再把该引用名作为其他变量名的别名,任何对该引用的赋值就是对该引用对应的目标变量名的赋值. 对引用求地址就是对目标变量求地址 ...
- 【C#】动态加载dll程序集
原文:http://www.cnblogs.com/bomo/archive/2013/03/01/2938165.html 很多时候我们需要用到引用其他程序集,有些程序集是.Net生成的,可以支持反 ...
- csu 10月 月赛 J 题
Description CSU又到了一年中评奖学金的时候了……各大学霸都或多或少地拿到了各种奖学金(你们自己看着办吧). 在这里,评奖学金有个很奇怪的规矩——每个同学得到的奖学金数一定满足相邻的两个非 ...