Python中的封装,继承和多态
面向对象的三大特性:封装,继承和多态
封装:在类的内部定义属性和方法,通过对象或类名来访问属性和方法,隐藏功能的实现细节,也可以设置访问权限。
广义的封装:实例化一个对象,给对象空间封装一些属性;狭义的封装:私有制;私有成员:私有静态字段,私有方法,私有对象属性
继承:子类需要重用父类的属性和方法,子类中也可以定义自己的属性和方法。
多态:python是弱类型语言,python中处处是多态;python中没有多态,但是有鸭子类型 ==》一些类含有相同的方法,则这些类就互称为鸭子
下面这几个类都有index方法,index具有相同的作用,则这几个类就互称为鸭子
class Str:
def index(self):
pass class List:
def index(self):
pass class Tuple:
def index(self):
pass
对于私有成员,类的外部不能访问,子类(派生类)也不可以访问,只能在本类的内部访问
class Animal:
head = "True" #静态变量(静态字段)
body = "True" #静态变量(静态字段)
__color = "red" #私有静态变量(私有静态字段)
__skin = "black" #私有静态变量(私有静态字段)
def __init__(self,name,age): #特殊方法
self.name = name #对象属性(普通字段)
self.age =age #对象属性(普通字段)
def eat(self):#普通方法
print("所有动物都需要吃……")
def drink(self):#普通方法
print("所有动物都需要喝……")
def __func(self):#私有方法
print("Animal fun") def fun(self):
self.__func() #私有方法在类的内部可以访问
class Dog(Animal):
pass a1 = Animal("小猫",2)
##print(a1.head,a1.body)
##a1.eat()
##print(a1.__color) #报错 对象不可以访问类的私有静态变量
##a1.__func() #报错 对象不可以访问类中私有方法 ##print(Animal.head)
##print(Animal.__color) #报错 类名不可以访问类中的私有静态变量
##Animal.__func() #报错 类名不可以直接访问类中的私有方法 d = Dog("小狗","2")
#print(d.head)
#print(d.__color) #报错 子类不可以访问父类的私有静态变量
#d.__func() #报错 子类不可以访问父类的私有方法 d.fun()
Python中的封装,继承和多态的更多相关文章
- python 面向对象及封装继承和多态
######装饰器######装饰器的概念 - 装饰器的实现是函数里面嵌套函数;- 装饰器的本质是一个函数, 它可以让其他函数在不需要做任何代码改动的前提下增加额外的功能;- 装饰器需要传递一个函数, ...
- Python设计模式 - 基础 - 封装 & 继承 & 多态
面向对象的核心是对象,世间万物都可以看作对象,任何一个对象都可以通过一系列属性和行为来描述,可以包含任意数量和类型的数据或操作.类是用来描述具有相同属性和方法的所有对象的集合.类通常是抽象化的概念,而 ...
- day33 序列类型,绑定方法,类方法,静态方法,封装继承和多态
Python之路,Day20 = 序列类型,绑定方法,类方法,静态方法,封装继承和多态 序列是指有序的队列,重点在"有序". 一.Python中序列的分类 Python中的序列主要 ...
- python中使用多继承
python中使用多继承,会涉及到查找顺序(MRO).重复调用(钻石继承,也叫菱形继承问题)等 MRO MRO即method resolution order,用于判断子类调用的属性来自于哪个父类.在 ...
- Python中的单继承与多继承实例分析
Python中的单继承与多继承实例分析 本文实例讲述了Python中的单继承与多继承.分享给大家供大家参考,具体如下: 单继承 一.介绍 Python 同样支持类的继承,如果一种语言不支持继承,类就没 ...
- Python之路-面向对象&继承和多态&类属性和实例属性&类方法和静态方法
一.面向对象 编程方式 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发“更快更好更强…” 什么是面 ...
- objective-c自学总结(三)---面向对象的封装,继承与多态
面向对象的三大特性 封装 继承 多态 1.封装: 隐藏属性,方法或实现细节的过程称为封装 信息隐藏,隐藏对象的实现细节,不允许用户看到 将东西包装在一 然后以新的完整形式呈现出来 例如,两种或多种化学 ...
- [转] JS中简单的继承与多态
这里讲了一个最最最简单的JS中基于原型链的继承和多态. 先看一下以下这段代码的实现(A是“父类”,B是“子类”): var A = function(){ this.value = 'a'; this ...
- python 中的super()继承,搜索广度为先
一.python中类的继承 1.1 单继承 在python 中我们可以这样来定义一个类:及继承它的子类 class Father: def __init__(self, mes): #1 父类的ini ...
随机推荐
- drag与drop事件
为了支持网页上一些元素的拖动效果,可以使用drag和drog事件. 目前ie 5.0+, firefox 3.5+等都支持这些事件,ECMA Script第5版正式将其纳入标准. 对于被拖动的元素来说 ...
- 在vs2015中使用附加进程的方式调试IIS中的页面
发布网站至IIS-附加到进程调试 Internet Information Services(IIS,互联网信息服务),是由微软公司提供的基于运行Microsoft Windows的互联网基本服务. ...
- July 06th 2017 Week 27th Thursday
Knowledge is the antidote to fear. 知识可以解除恐惧. Fear always steps from unknown things. Once we know wha ...
- react开发中如何使用require.ensure加载es6风格的组件
其实用的babel,在浏览器端就应该可以加载,之前少了个default: require.ensure([],(require) => { let A = require('./a.js').d ...
- iText中输出 中文
iText中输出中文,有三种方式: 1.使用iTextAsian.jar中的字体 BaseFont.createFont("STSong-Light", "UniG ...
- 阿里巴巴连接池Druid简单使用
Druid参考:https://github.com/alibaba/druid 偶尔的机会解释Druid连接池,后起之秀,但是评价不错,另外由于是阿里淘宝使用过的所以还是蛮看好的. Druid集连接 ...
- App上线流程全攻略(史上最具体步骤)
@转载请保留:iOS界一迷糊小书童--->专注于iOS开发!!谢谢合作 /*****************************************1****************** ...
- springMVC框架下返回json格式的对象,list,map
原文地址:http://liuzidong.iteye.com/blog/1069343 注意这个例子要使用jQuery,但是jquery文件属于静态的资源文件,所以要在springMVC中设置静态资 ...
- ecshop 中如何禁用右键和F12
找到 网站根目录/themes/js/common.js,在最后加入如下代码: //禁用右键和F12 //方法一 document.oncontextmenu = function () { retu ...
- Educational Codeforces Round 55 (Rated for Div. 2) B. Vova and Trophies 【贪心 】
传送门:http://codeforces.com/contest/1082/problem/B B. Vova and Trophies time limit per test 2 seconds ...