您的位置:首页 > 编程语言 > Python开发

Python基础(17)_面向对象程序设计(抽象类、继承原理、封装、多态,绑定方法)

2017-07-06 21:13 746 查看

一、抽象类

  抽象类是一个特殊的类,它的特殊之处在于只能被继承,不能被实例化

1、在python中实现抽象类

import abc #利用abc模块实现抽象类

class All_file(metaclass=abc.ABCMeta):
all_type='file'
@abc.abstractmethod #定义抽象方法,无需实现功能
def read(self):
'子类必须定义读功能'
pass
@abc.abstractmethod #定义抽象方法,无需实现功能
def write(self):
'子类必须定义写功能'
pass

# class Txt(All_file):
#     pass
#
# t1=Txt() #报错,子类没有定义抽象方法

class Txt(All_file): #子类继承抽象类,但是必须定义read和write方法
def read(self):
print('文本数据的读取方法')
def write(self):
print('文本数据的读取方法')

class Sata(All_file): #子类继承抽象类,但是必须定义read和write方法
def read(self):
print('硬盘数据的读取方法')
def write(self):
print('硬盘数据的读取方法')

wenbenwenjian=Txt()
yingpanwenjian=Sata()

#这样大家都是被归一化了,也就是一切皆文件的思想
wenbenwenjian.read()
yingpanwenjian.write()


2、抽象类与接口

  抽象类的本质还是类,指的是一组类的相似性,包括数据属性(如all_type)和函数属性(如read、write),而接口只强调函数属性的相似性。

  抽象类是一个介于类和接口直接的一个概念,同时具备类和接口的部分特性,可以用来实现归一化设计

二、继承的实现原理(继承顺序)

1、在python中,如果类继承了多个类,那么其寻找的方式有两种:分别是:广度优先和深度优先

  当类是新式类是,多继承情况下,会按照广度优先方式查找

  [b]当类是经典类是,多继承情况下,会按照深度优先方式查找[/b]

假如有A-H类的继承关系如下:

HOST='127.0.0.1'
PORT=3306
DB_PATH=r'C:\Users\Administrator\PycharmProjects\test\面向对象编程\test1\db'


settings.py内容

import settings
import hashlib
import time
class MySQL:
def __init__(self,host,port):
self.host=host
self.port=port

@classmethod
def from_conf(cls):
print(cls)
return cls(settings.HOST,settings.PORT)

print(MySQL.from_conf) #<bound method MySQL.from_conf of <class '__main__.MySQL'>>
conn=MySQL.from_conf()

print(conn.host,conn.port)
conn.from_conf() #对象也可以调用,但是默认传的第一个参数仍然是类


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐