继承(extends)就是把多个类中相同的成员给提取出来定义到一个独立的类中,然后让这多个类和该独立的类产生一个关系,这多个类就具备了这些类容,这个关系就叫做继承。

实现继承的类称为子类,也叫派生类,而被继承的类称为父类,也叫超类或基类。

类的属性和方法可以被继承

注意:私有属性和方法不能被继承,构造方法也不能被继承

继承的好处:

1)提高代码的重用性和扩展性

2)模拟现实世界的关系

3)结构更清晰

继承的弊端:

1)让类的耦合性增强(某个类的改变就会影响其他和该类相关的类)

2)打破了封装性

写代码的原则:低耦合、高内聚。

耦合:类和类的关系

内聚:自己完成某件事的能力

下面看看继承的实例吧,代码如下:

class Dady(object):
def __init__(self):
self.money =
self.house = '3环里20套'
def sing(self):
print('唱歌')
def dance(self):
print('跳广场舞')
def lm(self):
print('找朋友') class Son(Zll): #继承只需在子类括号中写上父类类名就可以继承了
def dance(self): #重写dance(self)这个方法
print('跳霹雳舞') if __name__ == '__main__': #调试代码使用
aa =
Son() #实例化一个son,这样他会继承Dady类里的属性和方法
print(aa.house) #继承父类属性
print(aa.money) #继承父类属性
aa.lm() #继承父类的lm()方法
aa.dance() #重写了的dance是调用son类自己的

如果我们在项目中需要使用到mysql和redis,那么这两个的连接信息我们可以写在基类中,然后redis类和mysql类分别继承基类,这样就提高了代码的重用性。

class Base(object):
def __init__(self,host,port,password):
self.host = host,
self.port = port
self.password = password class Mysql(Base):
pass
class Redis(Base):
pass

封装数据的主要原因是:保护隐私(把不想别人知道的东西封装起来)   

封装方法的主要原因是:隔离复杂度(比如:电视机,我们看见的就是一个黑匣子,其实里面有很多电器元件,对于 用户来说,我们不需要清楚里面都有些元件,电视机把那些电器元件封装在黑匣子里,提供给用户的只是几个按钮接口, 通过按钮就能实现对电视机的操作。)

例如,我们可以将redis操作的一些方法封装起来,以后需要用到的时候直接调用就可以了。比如:string类型的和hash类型的各种操作。代码如下:

import redis

# r = redis.Redis()
class MyRedis():
def __init__(self,ip,password,port=,db=):
#构造函数
try:
self.r = redis.Redis(host=ip,password=password,port=port,db=db) #这时候并不会去连redis,所以捕捉不到数据库连接的异常,也可以不写try
# r = redis.ConnectionPool(host=ip,password=password,port=port,db=db)
except Exception as e:
print('redis连接失败,错误信息%s'%e)
def str_get(self,k):
res = self.r.get(k)
if res:
return res.decode()
def str_set(self,k,v,time=None):
self.r.set(k,v,time)
def delete(self,k):
tag = self.r.exists(k) #判断这个key是否存在
if tag:
self.r.delete(k)
print('删除成功')
else:
print('这个key不存在')
def hash_get(self,name,k):
res = self.r.hget(name,k)
if res:
return res.decode()
def hash_set(self,name,k,v):
self.r.hset(name,k,v)
def hash_getall(self,name):
data = {}
# {b'': b'', b'': b'sdad', b'': b'asdadsa'}
res = self.r.hgetall(name)
if res:
for k,v in res.items():
k = k.decode()
v = v.decode()
data[k]=v
return data
def hash_del(self,name,k):
res = self.r.hdel(name,k)
if res:
print('删除成功')
return
else:
print('删除失败,该key不存在')
return @property #(属性方法)装饰器,类似于属性的方法,调用时不用加括号
def clean_redis(self):
self.r.flushdb() #清1空redis
print('清空redis成功!')
return my = MyRedis('127.0.0.1','')
my.str_get('sss')

python学习笔记(二十四)继承与封装的更多相关文章

  1. Python学习日记(二十四) 继承

    继承 什么是继承?就是一个派生类(derived class)继承基类(base class)的字段和方法.一个类可以被多个类继承;在python中,一个类可以继承多个类. 父类可以称为基类和超类,而 ...

  2. python3.4学习笔记(二十四) Python pycharm window安装redis MySQL-python相关方法

    python3.4学习笔记(二十四) Python pycharm window安装redis MySQL-python相关方法window安装redis,下载Redis的压缩包https://git ...

  3. Python学习笔记(十四)

    Python学习笔记(十四): Json and Pickle模块 shelve模块 1. Json and Pickle模块 之前我们学习过用eval内置方法可以将一个字符串转成python对象,不 ...

  4. (C/C++学习笔记) 二十四. 知识补充

    二十四. 知识补充 ● 子类调用父类构造函数 ※ 为什么子类要调用父类的构造函数? 因为子类继承父类,会继承到父类中的数据,所以子类在进行对象初始化时,先调用父类的构造函数,这就是子类的实例化过程. ...

  5. Python学习笔记(十四):模块高级

    以Mark Lutz著的<Python学习手册>为教程,每天花1个小时左右时间学习,争取两周完成. --- 写在前面的话 2013-7-23 21:30 学习笔记 1,包导入是把计算机上的 ...

  6. Python 学习笔记(十四)Python类(二)

    创建简单的类 新式类和经典类(旧式类) Python 2.x中默认都是经典类,只有显式继承了object才是新式类 Python 3.x中默认都是新式类,经典类被移除,不必显式的继承object 新式 ...

  7. python学习笔记-(十四)进程&协程

    一. 进程 1. 多进程multiprocessing multiprocessing包是Python中的多进程管理包,是一个跨平台版本的多进程模块.与threading.Thread类似,它可以利用 ...

  8. Python学习(二十四)—— 前端基础之Bookstrap

    转载自:http://www.cnblogs.com/liwenzhou/p/8214637.html 一.Bootstrap介绍 Bootstrap是Twitter开源的基于HTML.CSS.Jav ...

  9. Java学习笔记二十四:Java中的Object类

    Java中的Object类 一:什么是Object类: Object类是所有类的父类,相当于所有类的老祖宗,如果一个类没有使用extends关键字明确标识继承另外一个类,那么这个类默认继承Object ...

  10. python学习笔记-(十四)I/O多路复用 阻塞、非阻塞、同步、异步

    1. 概念说明 1.1 用户空间与内核空间 现在操作系统都是采用虚拟存储器,那么对32位操作系统而言,它的寻址空间(虚拟存储空间)为4G(2的32次方).操作系统的核心是内核,独立于普通的应用程序,可 ...

随机推荐

  1. 树莓派安装centos 7系统

    1,格式化 https://www.sdcard.org/downloads/formatter_4/eula_windows/ 2,烧录,Win32DiskImager https://source ...

  2. 浅谈Facebook的服务器架构(组图)

    导读:毫无疑问,作为全球最领先的社交网络,Facebook的高性能集群系统承担了海量数据的处理,它的服务器架构一直为业界众人所关注.CSDN博主yanghehong在他自己最新的一篇博客< Fa ...

  3. dlib python 人脸检测与关键点标记

    http://blog.csdn.net/sunmc1204953974/article/details/49976045 人脸检测 #coding=utf-8 # -*- coding: utf-8 ...

  4. 面向对象分析和设计(OOA/D)

    UML不是OOA/D,也不是方法,它仅仅是一种图形表示法(表示的是OOA/D的想法),我们将在OOA/D中应用UML:分析,就是理解客户脑子中的概念,跟客户来沟通,分析出专业术语:设计,对分析出来的专 ...

  5. css -- 运用@media实现网页自适应中的几个关键分辨率

    经常为不同分辨率设备或不同窗口大小下布局错位而头疼,可以利用@media screen实现网页布局的自适应,但是怎样兼容所有主流设备就成了问题.到底分辨率是多少的时候设置呢? 先看下面的代码,这是从b ...

  6. 【cf492】E. Vanya and Field(拓展欧几里得)

    http://codeforces.com/contest/492/problem/E 一开始没时间想,,诶真是.. 挺水的一道题.. 将每个点的横坐标都转换成0,然后找纵坐标有多少即可..即解方程 ...

  7. mysql存储过程,获取指定数据库的某个表的字段信息

    DROP PROCEDURE IF EXISTS Proc; DELIMITER //CREATE PROCEDURE Proc(database_name varchar(50),table_nam ...

  8. 运维角度浅谈:MySQL数据库优化

    日志君导读: 一个成熟的数据库架构并非一開始设计就具备高可用.高伸缩等特性的.它是随着用户量的添加,基础架构才逐渐完好. 作者:zhenliang8.本文转自51CTO博客,点击原文阅读查看网页版文章 ...

  9. TCP/IP 在 Windows 下的实现

    Windows 实现TCP/IP 协议也是建立在上一篇博客的OSI 基础之上的. 用户态是由ws2_32.dll 和一些其他服务提供者的 dll 共同实现,当中ws2_32.dll 是一个框架.能够容 ...

  10. 第五篇:CUDA 并行程序中的同步

    前言 在并发,多线程环境下,同步是一个很重要的环节.同步即是指进程/线程之间的执行顺序约定. 本文将介绍如何通过共享内存机制实现块内多线程之间的同步. 至于块之间的同步,需要使用到 global me ...