继承(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. C++ 引用做左值

    //引用做左值 #include<iostream> using namespace std; int SetA(int *p){ *p = ; return *p; } int& ...

  2. Struts2的拦截器是如何使用AOP工作的

    拦截器(interceptor)是Struts2最强大的特性之一,也可以说是struts2的核心,拦截器可以让你在Action和result被执行之前或之后进行一些处理.同时,拦截器也可以让你将通用的 ...

  3. mysql查询各种类型的前N条记录

    mysql查询各种类型的前N条记录,将3改为N(需查询条数)即可  (select * from event_info where event_type = 1  limit 3)union all( ...

  4. 学习《深入理解C#》—— 可空类型、可选参数和默认值 (第一章1.3)

    目录 C#可空类型 C# 可选参数和默认值 C# 可空类型 在日常生活中,相信大家都离不开手机,低头族啊!哈哈... 假如手机厂商生产了一款新手机,暂时还未定价,在C#1中我们该怎么做呢? 常见的解决 ...

  5. Using XSLT and Open XML to Create a Word 2007 Document

    Summary: Learn how to transform XML data into a Word 2007 document by starting with an existing docu ...

  6. 编程之美 set 18 拈两堆石子游戏(3)

    题目 假设有两堆石头, 有两个玩家按照如下规则轮流取石头 每个人每次可以从两堆石头中取出数量相等的石头, 或者仅从一堆石头中取出任意数量的石头 最后把剩下的石头依次拿光的人取胜 首先取石头的人能否赢得 ...

  7. Python Scrapy 自动爬虫注意细节(3)

    一.对指定页面爬取 yield Request(url, meta={'cookiejar': response.meta['cookiejar']}, callback=self.parse_url ...

  8. 基于openssl的https服务配置

    环境: CA服务器:192.168.1.121 WEB服务器: 192.168.1.107 一.在CA服务器上生成自签证书 1.生成根私钥 (umask 077;openssl genrsa -out ...

  9. zookeeper未授权访问漏洞

    1.什么是zookeeper? ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,它是集群的管理者,监视着集群中各个节点的状态根据节点提交 ...

  10. Android之內置、外置SDCard

    From:http://blog.csdn.net/u011290399/article/details/10363881 在项目中,发现通过Android提供的API获取外置SDCard的操作一直不 ...