美文网首页
Python-学习之路-08 OOP -04

Python-学习之路-08 OOP -04

作者: 末世狂人 | 来源:发表于2019-02-19 00:27 被阅读0次

抽象类

  • 抽象方法:没有具体内容实现的方法叫做抽象方法
  • 抽象方法的主要意义是规范子类的行为和借口
  • 抽象类的使用需要借助abc模块
    • import abc
  • 抽象类:包含抽象方法的类,通常成为ABC类
  • 抽象类的使用
    • 抽象类里面可以包含抽象方法,也可以包含具体的方法
    • 抽象类中可以有方法也可以有属性
    • 抽象类不允许直接实例化
    • 必须继承才能使用,并且继承的子类必须实现父类所有的抽象方法
    • 如果子类没有实现所有的继承的抽象方法,那么子类也不能被实例
    • 抽象类的主要作用是设定类的标准,以便于在开发的时候有统一的规范
import abc

#声明一个类,并指定当前类的元类
class Human(abc.ABCMeta):
    #定义一个抽象方法
    @abc.abstractmethod
    def smoking(self):
        pass
    #定义一个类抽象方法
    @abc.abstractclassmethod
    def drink():
        pass
    #定义一个静态抽象方法
    @abc.abstractstaticmethod
    def play():
        pass
    

自定义类

  • 类其实是一个类定义和各种方法的自由组合
  • 可以定义类和函数,然后自己通过类直接赋值
  • 可以借助于MethodType实现
  • 可以借助于type实现
  • 可以利用元类 MetaClass实现
    • 元类是类,被用来创造其他的类
# 组装一个类
class A():
    pass

class B():
    pass

def play(self):
    print("playing................")
    
A.say = say
a = A()
a.say()
B.say = say
b = B()
b.say()
say..........
say..........
# 利用MethodType组装一个类
from types import MethodType

class A():
    pass

def say(self):
    print("say..........")
    
a = A()
a.say = MethodType(say,A)
a.say()
say..........
# 利用type造一个类
'''
先定义类应该具有的函数
'''
def say(self):
    print("say...............")
    
def talk(self):
    print("talk.................")
    
#利用type创建一个类
#如果参数中有tuple(元祖)的话,如果如果只有一个值的话,那么在值的后面需要加一个逗号 如:(object, )
A = type("className",(object, ),{"class_say":say,"class_talk":talk})
a = A()
a.class_say()
a.class_talk()
say...............
talk.................
# 元类案例
#元类写法是固定的,他必须继承自type
#元类一般以MetaClass结尾
class SchoolMetaClass(type):
    #创建魔术方法 new
    def __new__(cls,name,bases,attrs):
        #自己的业务处理
        print("哈哈,我是元类!")
        return type.__new__(cls,name,bases,attrs)
    
# 元类的使用
class Teacher(object, metaclass=SchoolMetaClass):
    pass

t = Teacher()

哈哈,我是元类!

相关文章

  • Python-学习之路-08 OOP -04

    抽象类 抽象方法:没有具体内容实现的方法叫做抽象方法 抽象方法的主要意义是规范子类的行为和借口 抽象类的使用需要借...

  • Python-学习之路-08 OOP -03

    类的成员描述符(属性) 类的成员描述符是为了在类中对类的成员属性进行相关操作而创建的一种方式 成员描述符的三种操作...

  • Python-学习之路-08 OOP -01

    OOP 面向对象 面向对象的特性封装封装就是对对象的成员进行访问限制封装的三个级别公开:public受保护的: p...

  • Python-学习之路-08 OOP -02

    单继承和多继承 单继承:每个类只能继承一个类 多继承:每个类可以继承多个类 单继承的多继承的优缺点 菱形继承/钻石...

  • 双色球2018024期围蓝

    四码 01 04 05 08 三码 04 05 08 二码 04 08 一码 08 仅供参考!

  • 2019-04-04

    2019-04-04 星月阁主 字数 1334 · 阅读 0 2019-04-04 10:00 学习之路 星月阁主...

  • AppCompatActivity

    title: AppCompatActivitydate: 2017-04-09 01:08:17tags: 学习...

  • 【优胜行动派️学习日记】

    [打卡宝宝]:魏萍 ​[打卡日期]:2019/08/04 [学习内容​​]:​水平营销 ​​[学习笔记]: 1.1...

  • Toolbar

    title: Toolbardate: 2017-04-09 01:08:17tags: 学习categories...

  • 双色球132期推荐

    04,05,07,19,26,30+14 04,05,08,19,25,26+14 04,05,08,19,25,...

网友评论

      本文标题:Python-学习之路-08 OOP -04

      本文链接:https://www.haomeiwen.com/subject/enptyqtx.html