Python-学习之路-08 OOP -04

2019-02-19  本文已影响0人  末世狂人

抽象类

import abc

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

自定义类

# 组装一个类
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()

哈哈,我是元类!
上一篇 下一篇

猜你喜欢

热点阅读