Python的元类

1、元类的结构图:
在这里插入图片描述
结合代码理解:

# -*- coding:utf-8 -*-
"""
@author: zhenyiyidejishu
@file: 元类.py
@time: 2024/4/10 22:15
@desc: 
"""

num = 10
print(num.__class__)

s = "abc"
print(s.__class__)

class Person:
    pass

p = Person()

print(p.__class__)

print("*"*20)

print(int.__class__)
print(str.__class__)

在这里插入图片描述
2、类的对象创建方式以及创建流程:
创建方式:

num=10
def run(self):
    print(self)

xxx = type("Dog", (), {
   "count":0, "run":run})
 '''
  type(name, bases, dict, **kwds)
type 传入三个参数时,用来创建类:

第一个参数 name 是被创建的类的名字,str 类型

第二个参数 bases 是被创建的类的父类,tuple 类型,不传默认是 (object,)

第三个参数 dict 是被创建的类的属性和方法,dict 类型
 '''
print(xxx)
print(xxx.__dict__)
p = xxx()
print(p)
p.run()
创建流程:
1、检测类中是否明确__metaclass__属性
2、检测父类中是否存在__metaclass__属性
3、检测模块中是否存在__metaclass__属性
4、通过内置的type这个元类来创建这个类对象

注意:类的描述,方便理清逻辑思路,方便多人合作开发时的沟通,方便生产项目文档。
生产文档方式:
1、内置模块 pydoc
操作步骤:查看文档描述,python -m pydoc 模块名称
启动本地服务,浏览文档 python -m pydoc -p 6666
生产指定模块html文档:python -m pydoc -w 模块名称
使用其他方式第三方库:
在这里插入图片描述

3、元类的应用场景
拦截类的创建
修改类
返回修改之后的类

补充:属性相关补充
私有化属性:缩小属性的访问的权限,比如 只能在类的内部访问

注意:
Python并没有真正的私有化支持,但是可以使用下划线完成伪私有化的效果。
类属性和实例属性遵循相同的规则

x:公有属性,
类内内部访问
子类内部访问
模块内其他位置访问:1、类访问(父类和派生类) 2、 实例访问(父类实例和派生类实例)
跨模块访问:
1、import 形式导入
2、from 模块 import * 形式导入

class Animal:
    x = 10
    def test(self):
        print(Animal.x)
        print(self.x)
    pass # 类的内部


class Dog(Animal):
    def test2(self):
        print(Dog.x)
        print(self.x)
    pass # 子类的内部


# 测试代码
a = Animal()
a.test()
print("*"*20)

d = Dog()
d.test2()
print("*"*20)

print(Animal.x)
print(Dog.x)
print(a.x)
print(d.x)

_y: 受保护权限
可以在
1、类的内部访问
2、子类内部访问
3、模块内其他位置访问
类访问 父类 或派生类
实例访问 父类实例或派生类实例中出现警告
4、跨模块访问
import 形式导入会产生警告
form module import * 形式导入 有__all__指明对应变量产生警告
无法访问__all__指明对应变量

A.py中访问私有化属性.py
from 私有化属性 import *
print(_a)

私有化属性.py中代码
__all__ = ["_a"]

_a = 111
class Animal:
    _x = 10
    def test(self):
        print(Animal._x)
        print(self._x)
    pass # 类的内部


class Dog(Animal):
    def test2
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

可厉害的土豆

你的鼓励是我创作的源泉

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值