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)

  • 相关阅读:
    java处理数据库date类型数据
    in与exist , not in与not exist 的区别
    Eclipse的调试功能的10个小窍门
    关于Synchornized,Lock,AtomicBoolean和volatile的区别介绍
    推荐使用concurrent包中的Atomic类
    深入 Java 调试体系: 第 1 部分,JPDA 体系概览
    dom 绘制正方形
    dom 拖拽div
    dom 按着shift多选
    dom select选单
  • 原文地址:https://www.cnblogs.com/kingforn/p/11356145.html
Copyright © 2011-2022 走看看