python-抽象类,接口类以及继承

抽象类和接口类
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)

 

私有的
私有的静态属性,方法,对象的属性
使用_名字的方式调用,保证在类内部可以调用,外部不行
私有的,不能被继承
当有一个名字,不想被外部使用也不想被子类继承,只想在内部使用的时候
就定义私有的

posted @ 2018-01-09 13:48  dwenwen  阅读(285)  评论(0)    收藏  举报