封装

封装最好理解了。封装是面向对象的特征之一,是对象和类概念的主要特性。

封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。

 class dog(object):
nationality='ch'#公有属性
def __init__(self,name,food,leven):#构造函数,方法,初始化方法
self.name=name #实例指针,指向 属性 对象成员
self.food=food
self.leven=leven
self.__haot='hhh'#前面双下划线定义为私有属性 def get_hoat(self):#定义方法为私有属性提供接口
return self.__haot
def say(self):#类中的方法 都是公有方法
print('hello,my name is ',self.name)
def eat(self,foods):
print("my food is %s,but my eat %s"%(self.food,foods))
def leve(self):
print("my leve is ",self.leven) def __del__(self):
print("删除中...") d=dog("liili",'gl',"")
d.say()
d.eat('kkk')
d.leve()
print(d.get_hoat())#通用接口访问私有属性 print(d._dog__haot)#强制访问私有属性
print(d.nationality) dog.nationality='chan'
print(d.nationality)
d.nationality='us'
print(d.nationality)
 class F1(object):
def __init__(self,n):
self.N = n
print('F1') class F2(object):
def __init__(self,arg1):
self.a = arg1
print('F2') class F3(object):
def __init__(self,arg2):
self.b = arg2
print('F3') c1=F1('yjj')
c2=F2(c1)#可以封装一个对象
c3=F3(c2)#可以封装多层的对象
print(c3.b.a.N)#通过 . 调用

继承

继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。

通过继承创建的新类称为“子类”或“派生类”。

被继承的类称为“基类”、“父类”或“超类”。

 class studen(object):#定义类  学生 基类
def __init__(self,name,age,clas):#名字,年龄,班级
self.name=name
self.age=age
self.clas=clas
def talk(self):
print('%stalk one.....'%self.name)
def walk(self):
print('%s walk....'%self.name)
def info_user(self):
print('name is %s, age is %s,clas is %s'%(self.name,self.age,self.clas)) class clas_one(studen):#继承studen
def __init__(self,name,age,clas,score):#重构构造方法
#studen.__init__(self,name,age,clas)#先继承, 再重构
super(clas_one,self).__init__(name,age,clas)#新式类
self.score=score#增加新对象成员
def talk(self):#重写方法
print('is new talk ,%s'%self.name)
def score_info(self):#新增加 子类方法
print(self.score,'分') p=clas_one('学生一',36,'一年三班',178)
p.talk()
p.score_info()
 class F1(object):
def __init__(self):
print('F1')
def a1(self):
print('F1a1')
def a2(self):
print('F1a2') class F2(F1):
def __init__(self):
print('F2')
def a1(self):
self.a2()
print('F2a1')
def a2(self):
print('F2a2') class F3(F2):
def __init__(self):
print('F3')
def a11(self):
print('F3a1')
def a2(self):
print('F3a2') obj=F3()
obj.a1()#调用时,self指向当前对象

多态

 class Animal(object):
def __init__(self,name):
self.name=name
def talk(self):
raise NotImplementedError('提示出错') class c(Animal):#继承Animal
def talk(self):
print('%s 1111'%self.name) class d(Animal):#继承Animal
def talk(self):
print('%s 2222'%self.name) def talk_all(obj):#用函数来模拟多态
obj.talk() c1=c('猫')
d1=d("狗") talk_all(c1)
talk_all(d1)

python第三十一天-----类的封装、继承,多态.....的更多相关文章

  1. java类的封装 继承 多态

    1.猜数字小游戏 package cn.jiemoxiaodi_02; import java.util.Scanner; /** * 猜数字小游戏 * * @author huli * */ pub ...

  2. php面向对象 封装继承多态 接口、重载、抽象类、最终类总结

    1.面向对象 封装继承多态  接口.重载.抽象类.最终类 面向对象 封装继承多态  首先,在解释面向对象之前先解释下什么是面向对象? [面向对象]1.什么是类? 具有相同属性(特征)和方法(行为)的一 ...

  3. 孤荷凌寒自学python第三十一天python的datetime.timedelta模块

     孤荷凌寒自学python第三十一天python的datetime.timedelta模块 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) datetime.timedelta模块是一个表示 ...

  4. python第三十一课--递归(2.遍历某个路径下面的所有内容)

    需求:遍历某个路径下面的所有内容(文件和目录,多层级的) import os #自定义函数(递归函数):遍历目录层级(多级) def printDirs(path): dirs=os.listdir( ...

  5. python面向对象(封装,继承,多态)

    python面向对象(封装,继承,多态) 学习完本篇,你将会深入掌握 如何封装一个优雅的借口 python是如何实现继承 python的多态 封装 含义: 1.把对象的属性和方法结合成一个独立的单位, ...

  6. 浅谈学习C++时用到的【封装继承多态】三个概念

    封装继承多态这三个概念不是C++特有的,而是所有OOP具有的特性. 由于C++语言支持这三个特性,所以学习C++时不可避免的要理解这些概念. 而在大部分C++教材中这些概念是作为铺垫,接下来就花大部分 ...

  7. Python 入门 之 面向对象的三大特性(封装 / 继承 / 多态)

    Python 入门 之 面向对象的三大特性(封装 / 继承 / 多态) 1.面向对象的三大特性: (1)继承 ​ 继承是一种创建新类的方式,在Python中,新建的类可以继承一个或多个父类,父类又可以 ...

  8. Java三大特性(封装,继承,多态)

    Java中有三大特性,分别是封装继承多态,其理念十分抽象,并且是层层深入式的. 一.封装 概念:封装,即隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别:将抽象得到的数据 ...

  9. Java基础——面向对象(封装——继承——多态 )

    对象 对象: 是类的实例(实现世界中 真 实存在的一切事物 可以称为对象) 类: 类是对象的抽象描述 步骤: 1.定义一个类 (用于 描述人:) ( * 人:有特征和行为) 2.根据类 创建对象 -- ...

随机推荐

  1. 带你入门 Docker

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有任何 ...

  2. C# 根据Combobox控件来动态显示TabControl下的子元素

    根据下来列表来动态显示TabControl下的元素 需要准备两个控件:Combobox (命名为:cbPrjType)和 TabControl (命名为:tabPrjType),TabControl下 ...

  3. WebSocket connection to 'ws://xx:9502/' failed:Error in connection establishment:net::ERR_CONNECTION_TIMED_OUT

    1.首先看能否ping通服务器 2.telnet xx 9502之后能不能连通 3.如果连不通有可能是防火墙的问题 可以试试清空防火墙规则,或者关闭防火墙 iptables -F

  4. LDA-线性判别分析(一)预备知识

    本来是要调研 Latent Dirichlet Allocation 的那个 LDA 的, 没想到查到很多关于 Linear Discriminant Analysis 这个 LDA 的资料.初步看了 ...

  5. Django--分页器(paginator)

    1 Django的分页器(paginator)简介 在页面显示分页数据,需要用到Django分页器组件 from django.core.paginator import Paginator Pagi ...

  6. kubernetes构建时容器的时间与宿主机不一致的解决方法

    kubernetes默认使用docker容器部署的应用,会出现时间与主机不一致的情况 容器时间与主机差8个小时:主机的与容器的/etc/localtime不一致 解决方法:挂载主机的/etc/loca ...

  7. ubuntu16.04 程序开机自启动设置及启动优化

    使用过程中,为了方便使用,有一些程序需要开机时自启动应用,下面将介绍一下ubuntu16.04下程序的开机自启动设置方法. 1  建立一个可执行程序的运行脚本如 keepalive.sh.内部写入要执 ...

  8. Kafka实战-简单示例

    1.概述 上一篇博客<Kafka实战-Kafka Cluster>中,为大家介绍了Kafka集群的安装部署,以及对Kafka集群Producer/Consumer.HA等做了相关测试,今天 ...

  9. 面试:C++工厂模式实现

    #include <iostream> enum CTYPE {PRODUCTA,PRODUCTB}; class Product{ public: ; virtual ~Product( ...

  10. js常用面试题整理

    1.array操作关键字: pop() 删除最后一个:push最后添加一个或者多个:reverse颠倒数组:shift删除第一个元素:unshift首部添加元素:concat衔接两个数组:join把数 ...