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)

  • 相关阅读:
    身份证验证(c#和js)
    获取焦点问题
    关于加载设计器遇到一个或多个错误问题的解决方案
    关于如何使用自定义的结束消息循环的方式 (转载)
    多种重要源码下载
    关于线程同步(转载)
    ArrayList的使用技巧
    一些所谓有利于家庭生活的优点
    080801 30℃
    080731 31℃
  • 原文地址:https://www.cnblogs.com/kingforn/p/11356145.html
Copyright © 2011-2022 走看看