python核心课程-面向对象-补充-元类

1.类相关补充:

    元类:概念->创建类对象的类

              结构图:

python核心课程-面向对象-补充-元类

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。