python第三十一天-----类的封装、继承,多态.....
封装
封装最好理解了。封装是面向对象的特征之一,是对象和类概念的主要特性。
封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。
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第三十一天-----类的封装、继承,多态.....的更多相关文章
- java类的封装 继承 多态
1.猜数字小游戏 package cn.jiemoxiaodi_02; import java.util.Scanner; /** * 猜数字小游戏 * * @author huli * */ pub ...
- php面向对象 封装继承多态 接口、重载、抽象类、最终类总结
1.面向对象 封装继承多态 接口.重载.抽象类.最终类 面向对象 封装继承多态 首先,在解释面向对象之前先解释下什么是面向对象? [面向对象]1.什么是类? 具有相同属性(特征)和方法(行为)的一 ...
- 孤荷凌寒自学python第三十一天python的datetime.timedelta模块
孤荷凌寒自学python第三十一天python的datetime.timedelta模块 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) datetime.timedelta模块是一个表示 ...
- python第三十一课--递归(2.遍历某个路径下面的所有内容)
需求:遍历某个路径下面的所有内容(文件和目录,多层级的) import os #自定义函数(递归函数):遍历目录层级(多级) def printDirs(path): dirs=os.listdir( ...
- python面向对象(封装,继承,多态)
python面向对象(封装,继承,多态) 学习完本篇,你将会深入掌握 如何封装一个优雅的借口 python是如何实现继承 python的多态 封装 含义: 1.把对象的属性和方法结合成一个独立的单位, ...
- 浅谈学习C++时用到的【封装继承多态】三个概念
封装继承多态这三个概念不是C++特有的,而是所有OOP具有的特性. 由于C++语言支持这三个特性,所以学习C++时不可避免的要理解这些概念. 而在大部分C++教材中这些概念是作为铺垫,接下来就花大部分 ...
- Python 入门 之 面向对象的三大特性(封装 / 继承 / 多态)
Python 入门 之 面向对象的三大特性(封装 / 继承 / 多态) 1.面向对象的三大特性: (1)继承 继承是一种创建新类的方式,在Python中,新建的类可以继承一个或多个父类,父类又可以 ...
- Java三大特性(封装,继承,多态)
Java中有三大特性,分别是封装继承多态,其理念十分抽象,并且是层层深入式的. 一.封装 概念:封装,即隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别:将抽象得到的数据 ...
- Java基础——面向对象(封装——继承——多态 )
对象 对象: 是类的实例(实现世界中 真 实存在的一切事物 可以称为对象) 类: 类是对象的抽象描述 步骤: 1.定义一个类 (用于 描述人:) ( * 人:有特征和行为) 2.根据类 创建对象 -- ...
随机推荐
- Python——破解极验滑动验证码
极验滑动验证码 以上图片是最典型的要属于极验滑动认证了,极验官网:http://www.geetest.com/. 现在极验验证码已经更新到了 3.0 版本,截至 2017 年 7 月全球已有十六万家 ...
- python 离散序列 样本数伸缩(原创)
解决问题: 有一个固定长度的1维矩阵,将这个矩阵的取样点进行扩充和减少 功能函数: def discrete_scale(data, num): import numpy as np import c ...
- 关于ASP.Net Core Web及API身份认证的解决方案
6月15日,在端午节前的最后一个工作日,想起有段日子没有写过文章了,倒有些荒疏了.今借夏日蒸蒸之气,偷得浮生半日悠闲.闲话就说到这里吧,提前祝大家端午愉快(屈原听了该不高兴了:))!.NetCore自 ...
- Netty源码分析之服务启动
本节主要分析server的启动过程. Netty是基于Nio实现的,所以也离不开selector.serverSocketChannel.socketChannel和selectKey等,只不过Net ...
- POJ 1860 Currency Exchange(如何Bellman-Ford算法判断图中是否存在正环)
题目链接: https://cn.vjudge.net/problem/POJ-1860 Several currency exchange points are working in our cit ...
- 翻译:CREATE PROCEDURE语句(已提交到MariaDB官方手册)
本文为mariadb官方手册:CREATE PROCEDURE的译文. 原文:https://mariadb.com/kb/en/create-procedure/我提交到MariaDB官方手册的译文 ...
- Django之模板层
在一个项目里面有一个专门放模板的文件夹Templates,有一个专门放视图的文件views,而且我们大多给浏览器响应的都应该是一个完整的页面,也就是读取的是一个HTML文件,然后再返回给浏览器.但我们 ...
- Mini2440 通过 SPI 操作 OLED (裸板下使用 SPI 控制器)
在裸板下使用 SPI 的话,有两种方法可选: 使用 IO 口模拟 SPI 进行操作 使用 SPI 控制器进行操作 这里我们选用控制器的方式,简单方便. 初始化 SPI static void SPIC ...
- C# .aspx 页面更换命名空间
1.选中命名空间,右键单击,选择重构,之后选择重命名.如下图: 2.弹出重命名对话框 3.重写你需要的名字,点击确定. 4.这里重点注意了,不可直接点击应用,否则你会后悔的.你必须对应的看看那个是否是 ...
- Ubuntu安装SSH SERVER
apt-get update apt-get install openssh-server 安装好后查看SSH是否启动 打开”终端窗口”,输入”sudo ps -e |grep ssh“–>回车 ...