抽象类
- 抽象方法:没有具体内容实现的方法叫做抽象方法
- 抽象方法的主要意义是规范子类的行为和借口
- 抽象类的使用需要借助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()
哈哈,我是元类!
网友评论