zoukankan      html  css  js  c++  java
  • 自定义元类控制类的创建

    # Chinese = Mymeta(class_name,class_bases,class_dic)
    # 创建元类如下:


    class Mymeta(type):
    def __init__(self, class_name, class_bases, class_dic):
    # print(class_name)
    # print(class_bases)
    # print(class_dic)
    # 打印结果如下:
    '''
    Chinese
    (<class 'object'>,)
    {'__module__': '__main__', '__qualname__': 'Chinese',
    'country': 'china', '__init__': <function Chinese.__init__ at 0x0000019CC0750AE8>,
    'talk': <function Chinese.talk at 0x0000019CC0750B70>}
    '''

    super(Mymeta, self).__init__(class_name, class_bases, class_dic)


    class Chinese(object, metaclass=Mymeta): # metaclass 元类
    country = 'china'

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

    def talk(self):
    print('%s is talking' % self.name)


    # ------------例子控制类----------------------------------------


    class Mymeta(type):
    def __init__(self, class_name, class_bases, class_dic):
    if not class_name.istitle(): # class_name 首字母不是大写就报类型错误
    raise TypeError('类型错误')
    if '__doc__' not in class_dic or not class_dic['__doc__'].strip():
    raise TypeError('必需要有注释且不能为空')

    super(Mymeta, self).__init__(class_name, class_bases, class_dic)


    class Chinese(object, metaclass=Mymeta): # metaclass 元类
    """
    这是中国人的类
    """
    country = 'china'

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

    def talk(self):
    print('%s is talking' % self.name)

  • 相关阅读:
    【BZOJ】4636: 蒟蒻的数列
    BZOJ1878 [SDOI2009]HH的项链
    【网络流24题----02】太空飞行计划
    【网络流24题----03】Air Raid最小路径覆盖
    【网络流24题----01】飞行员配对方案问题
    素数判定(米勒测试定理-费马小定理+快速乘)
    一堆模板(丑陋0.0)------数据结构
    丑数(USACO)
    NOI[2001]食物链
    关于Tarjan(2)
  • 原文地址:https://www.cnblogs.com/kingforn/p/11356145.html
Copyright © 2011-2022 走看看