首页 > 其他分享 >通过元类来控制类的产生

通过元类来控制类的产生

时间:2023-10-30 11:37:46浏览次数:26  
标签:__ 控制 name 产生 self 元类 Person print class

写一个类来继承 type 以后这种类都叫元类

自定义元类来控制类的产生: 可以控制类名,可以控制类的继承父类,控制类的名称空间

如果你要自定义元类,就必须继承type

练习一:加限制 控制类名必须用sd开头

class My_class(type):
#     def __init__(self, *args, **kwargs):	# 目前不知道传什么参数,所用*args(接收所有位置实参),和**kwargs(接收所有的关键字实参)
#         print(args)
#         print(kwargs)
    def __init__(self, name, bases, dic):	# 这里必须用dic
        # self 现在就是Person类
        print(name)		# 这里的name就是class类名(Person)
        print(bases)
        print(dic)
        # 练习一:加限制  控制类名必须用sd开头			驼峰体
        if not name.startswith('sb'):
            raise Exception('类名没有以sb开头')
        
# metaclass=My_class	指定这个类生成的时候,用自己写的My_class这个元类
class Person(metaclass=My_class):		# 在Person类后面加metaclass=My_class的时候会调用My_class类的__init__
    school = 'FYZX'

    def __init__(self, name):
        self.name = name

    def score(self):
        print("分数为100")
       
p = Person()

练习二:类必须加注释

情景一: 注释不是空

class My_class(type):
    def __init__(self, name, bases, dic):
        print(self.__dict__['__doc__'])	# 两种方法都可以调用
        print(dic['__doc__'])
       
class Person(metaclass=My_class):
    '''
    我去,注释啊
    '''
    school = 'FYZX'

    def __init__(self, name):
        self.name = name

    def score(self):
        print("分数为100")
       
p = Person()

情景二: 注释为空;或没有注释

class My_class(type):
    def __init__(self, name, bases, dic):
        print(self.__dict__['__doc__'])	
        doc = self.__dict__['__doc__'].split()
        
        if not doc:
            # 没有加注释
            raise Exception('没有加注释')
     
class Person(metaclass=My_class):	# 在Person类的方法下用三个点('''''')才是方法的注释
    '''
    
    '''
    school = 'FYZX'

    def __init__(self, name):
        self.name = name

    def score(self):
        print("分数为100")
       
p = Person('nick')

标签:__,控制,name,产生,self,元类,Person,print,class
From: https://www.cnblogs.com/hanyingshuo/p/17797372.html

相关文章

  • GIT 分布式版本控制系统
    一、GIT分布式版本控制系统分布式版本控制,没有中央服务器的概念,每个人都有自己的版本库,因此每个人在工作时候,不需要联网,版本库本地即可管理。既然每个人都是一个完整的版本库,同事之间如果需要协作开发,就需要找一个用于“交换文件”的中央服务器,这个服务器不存在也不影响大家干......
  • Kaldi安装过程中遇到cub-1.8.0.tar.gz、sctk-20159b5.tar.gz、openfst-1.7.2.tar.gz三
    Kaldi安装过程中遇到cub-1.8.0.tar.gz、sctk-20159b5.tar.gz、openfst-1.7.2.tar.gz三个包下载不全产生报错的状况。从官网下载三个包,然后上传到Linux服务器kaldi/tools目录下,再运行Makefile即可。以下是三个包的下载链接cub-1.8.0.tar.gz下载链接:https://pan.baidu.com/s/1jX......
  • 工控制造业的管理系统
    工控制造业的管理系统有多种类型,根据功能和层次可以分为以下几类:MES(制造执行系统):MES是面向制造企业车间执行层的生产信息化管理系统,一般位于上层ERP与底层的工业控制之间。MES的主要功能包括质量管理、过程管理、维护管理、产品跟踪和谱系、性能分析、物料管理等  ......
  • chapter4:介质访问控制子层
    chapter4:介质访问控制子层4.1信道分配问题4.1.1静态信道分配​ 主要考虑FDM(频分多路复用)和TDM(时分多路复用)。4.1.2动态信道分配的假设​ 流量独立、单信道、冲突可观察、时间连续或分槽、载波侦听或不听4.2多路访问协议4.2.1ALOHA纯ALOHA​ 当发送站有数据时......
  • ### 流程控制
     ###条件判断语句-顺序结构的程序虽然能解决计算、输出等问题,但不能做判断再选择。对于要先做判断再选择的问题就要使用分支结构。-单分支语句-语法:-```pythonif表达式:代码块```->说明:>>1、“表达式”可以是一个单一的值或者复杂语句......
  • 【C++】继承 ⑬ ( 虚继承原理 | 虚继承解决继承二义性问题 | 二义性产生的原因分析 )
    文章目录一、虚继承原理1、虚继承解决继承二义性问题2、二义性产生的原因分析3、虚继承原理二、代码示例-虚继承原理1、完整代码示例2、执行结果一、虚继承原理1、虚继承解决继承二义性问题继承的二义性:如果一个子类(派生类)继承多个父类(基类),这些父类都继......
  • 工业自动化控制通信协议Profinet系列-3、CoDeSys软PLC方案介绍
    工业自动化控制通信协议Profinet系列-3、CoDeSys软PLC方案介绍文章目录工业自动化控制通信协议Profinet系列-3、CoDeSys软PLC方案介绍一、前言二、Profinet搭建资料收集三、CoDeSys系列四、接下来一、前言之前在树莓派desktop上已经成功编译运行测试程序,但是还需要主站去和其交互......
  • Python:控制台输入密码passwod的方法
    目录inputgetpasstermiosmsvcrtinputprint(input("pleaseinput:"))$python3demo.pypleaseinput:123456123456缺点:不安全getpassimportgetpassprint(getpass.getpass("pleaseinput:"))$python3demo.pypleaseinput:123456缺点:看不到输入的位数termi......
  • React学习一:环境搭建、JSX基础、事件绑定、组件使用、样式控制
    一、概念React由Meta公司研发,是一个用于构建Web和原生交互界面的库。react中文文档地址:https://zh-hans.react.dev/learnReact的优势相较传统基于DOM开发的优势:组件化的开发方式;不错的性能相较于其他前端框架的优势:丰富的生态;跨平台支持二、环境搭建首先和vue项目一样,项目......
  • RabbitMQ 插件控制界面
    目录overviewConnectionsChannelsExchanges交换机Queuesadmin大佬文章,请优先查看!!!RabbitMQ控制界面详解overviewConnectionsChannelsExchanges交换机Queuesadmin......