python核心课程-面向对象-补充-元类
1.类相关补充:
元类:概念->创建类对象的类
结构图:
num = 10 print(num.__class__) s = "abc" print(s.__class__) class Person: pass p = Person() print(p.__class__) print(int.__class__) print(str.__class__) print(Person.__class__) print("-"*20) print(type.__class__)
类的创建的两种方式。
# ----------------------------------------类的创建方式------------------------------------------------------------------ # class Person: # count = 0 # def run(self): # pass num = 10 # print(type(num)) def run(self): print(self) xxx = type("Dog",(),{"count": 0,"run": run}) print(xxx) d = xxx() print(d) d.run()
类创建的流程
(1)检测类对象中是否有明确__metaclass__属性
(2)检测父类中是否存在__metaclass__属性
(3)检测模块中是否存在__metaclass__属性
(4)通过内置的type这个元类,来创建这个类对象。
# ----------------------------------------类的创建流程------------------------------------------------------------------ # 模块级别指明元类的方法 # __metaclass__ = xxx class Animal: pass # class Person(metaclass=xxx):指明元类xxx # 表示Person类继承自Animal class Person(Animal): # 指明元类 # __metaclass__ = xxx pass
元类的应用场景:
(1)拦截类的创建
(2)修改类
(3)返回修改之后的类
(4)后面补充
类的描述
目的:方便理清逻辑思路。方便多人合作开发共同。方便生成项目文档。
描述方式:
class Person: """ 关于这个类的描述,类的作用,类的构造函数等等;类属性的描述 Attributes: count: int 人的个数 """ # 这里表示,是人的个数 count = 1 def run(self, distance, step): """ 这个方法的作用效果 :param distance:参数的含义,参数的类型int,是否有默认值 :param step:参数的含义,参数的类型int,是否有默认值 :return:返回结果含义(时间)。返回数据类型int """ print("人在跑") return distance / step help(Person)
生成项目文档(补充)
方式1:使用内置模块->pydoc
具体步骤:查看文档描述->python3 -m pydoc 模块名称
启动本地服务,浏览文档->python3 -m pydoc - p 66666
生成指定模块html文档->python3 -m pydoc - w 模块名称
方式2:使用一些第三方模块帮助我们生成。sphinx,epydoc,doxygen。