抽象类和接口类
python不崇尚接口类
python本身支持多继承,没有接口专用的语法,但是我知道接口的概念
接口类 :
是规范子类的一个模板,只要接口类中定义的,就应该在子类中实现
接口类不能被实例化,它只能被继承
支持多继承
接口类的作用是为了规范子类,不能实例化
from abc import ABCMeta,abstractmethod
class Fly_Animal(metaclass=ABCMeta): #是一种规范
@abstractmethod
def fly(self):pass
class Swim_Animal(metaclass=ABCMeta): #是一种规范
@abstractmethod
def swim(self):pass
class Walk_Animal(metaclass=ABCMeta): #是一种规范
@abstractmethod
def walk(self):pass
class Swan(Walk_Animal,Swim_Animal,Fly_Animal):
def walk(self):
print('自己实现walk功能')
class Frog(Walk_Animal,Swim_Animal):
pass
![]()
例题:应用支付
抽象类:也是一种模板和规范
抽象类可以实现一些子类共有的功能和属性,但抽象类不鼓励多继承
python中是没有接口的概念的,只能借助抽象类的模块来实现接口类
![]()
from abc import ABCMeta,abstractmethod
class Bases(metaclass=ABCMeta):
def __init__(self,filename):
self.filename = filename
@abstractmethod #抽象方法
def open(self):
return 'file_handler'
@abstractmethod
def close(self):pass
@abstractmethod
def write(self):pass
@abstractmethod
def read(self):pass
class File(Bases):
def open(self):pass
def close(self):pass
def read(self):pass
def write(self):pass
View Code
抽象类不能被实例化,这个抽象类可以规范子类必须实现抽象类中的抽象方法
![]()
class Func:
__we = 'wenwen'
def __init__(self,ww):
self.ww = ww
def __msc(self):
print( 'www')
def view(self):
print(self.__msc())
print(Func._Func__msc('as'))
a = Func()
a.view()
class Func:
__we = 'wenwen'
# def __msc(self):
# return 'www'
def view(self):
print('www')
a = Func()
a.view()
例题
封装
封装:把一些属性和方法放到类里,这本身就是一种封装
封装:把属性和方法藏在类里,我只能在类内部调用,不能再外部使用
![]()
class Dog:
__role = 'dog' #私有的静态属性
def __discount(self): #私有的方法
print('in _func')
def price(self):
self.__discount()
print(Dog.__role) #在类内使用
print(Dog.__dict__)
# print(Dog._Dog__role) #不允许是用这种方法在类外显示
从类的外面不能直接调用,在类内的使用加上了一层密码:_类名
d = Dog()
d.price()
View Code
定义一个私有变量\属性\方法:__名字
在类的内部可以直接用:__名字
在类的外部不能直接使用,如果一定要用,在私有方法之前加上:_类名,变成 _类名__名字
在类外的名字,通过__dict__就可以查看
![]()
例题
class Room:
def __init__(self,name,price,length,width):
self.name = name
self.price = price
self.__length = length
self.__width = width
def area(self):
return self.__length*self.__width
house = Room('xiaoming',1000,10,20)
# print(house.area())
class A:
__a = 'ww'
b = 'wenwen'
def __func(self):
print(A.__a+'oo')
print('__a_func')
class B(A):
def __init__(self):
self.__func()
b = A()
b._A__func()
print(b._A__a)
私有的
私有的静态属性,方法,对象的属性
使用_名字的方式调用,保证在类内部可以调用,外部不行
私有的,不能被继承
当有一个名字,不想被外部使用也不想被子类继承,只想在内部使用的时候
就定义私有的