美文网首页
Python元类

Python元类

作者: 莫忘初心_倒霉熊 | 来源:发表于2020-02-17 17:57 被阅读0次

元类

元类就是用来创建类的,元类就是类的类。

实例

关于type()函数的使用戳这里

  • 元类为一个函数
def upper_attr(class_name,class_parents,class_attr):
    """
    遍历属性字典,把不是__开头的属性名字变为大写
    :param class_name: 会保存类的名字 Foo
    :param class_parents: 会保存类的父类 object
    :param class_attr: 会以字典的方式保存所有的类属性
    """

    new_attr={}
    for name,value in class_attr.items():
        if not name.startswith("__"):
            new_attr[name.upper()] = value

    #调用type来创建一个类
    return type(class_name,class_parents,new_attr)

# python3
class Foo(object,metaclass = upper_attr):
    bar = 'zip'

print(hasattr(Foo,'bar'))  # False
print(hasattr(Foo,"BAR"))  # True
f = Foo()                  #zip
print(f.BAR)
  • 元类为一个类
class UpperAttrMetaClass(type):
    """
    __new__ 是在__init__之前被调用的特殊方法
    __new__ 是用来创建对象并返回的方法
    而__init__只是用来将传入的参数初始化给对象
    很少使用到__new__,除非你希望能够控制对象的创建
    这里,创建的对象是类,你也可以在__init__中做些事情
    """
    def __new__(cls,class_name,class_parents,class_attr):
        """遍历属性字典,把不是__开头的属性名字变为大写"""
        new_attr={}
        for name,value in class_attr.items():
            if not name.startswith("__"):
                new_attr[name.upper()] = value

        #调用type来创建一个类
        return type(class_name,class_parents,new_attr)

# python3 语法
class Foo(object,metaclass = UpperAttrMetaClass):
    bar = 'zip'

# python2 语法
# class Foo(object):
#     #设置Foo类的元类为UpperAttrMetaClass
#     __metaclass__ = UpperAttrMetaClass
#     bar = 'zip'

print(hasattr(Foo,'bar'))       # False
print(hasattr(Foo,"BAR"))       # True
f = Foo()           
print(f.BAR)                    # zip

相关文章

  • Python 进阶丨如何创建你的第一个 Python 元类?

    摘要:通过本文,将深入讨论Python元类,其属性,如何以及何时在Python中使用元类。 Python元类设置类...

  • 10.元类

    元类的对象是类type是python的内建元类 自定义元类:

  • 29.Python之面向对象的元类

    Python之面向对象的元类 什么是元类?类的类就是元类,元类创建对象。使用class定义的类,用来产生程序员自己...

  • Python 元类

    什么是元类?元类就是创建类的类,type是最原始的一个元类。(实例是实例化的类,而类是元类的实例)python中一...

  • scala类与伴生类、单例

    类似python元类与apply方法类似python中call方法

  • python 元类

    转载 刘仲雨 两句话掌握python最难知识点——元类 千万不要被所谓“元类是99%的python程序员不会用到的...

  • python元类

    在大多数编程语言中,类就是一组用来描述如何生成一个对象的代码段。在Python中这一点仍然成立类也是对象。但是,P...

  • Python元类

    类也是对象,在理解元类之前,你需要先掌握Python中的类。Python中类的概念借鉴于Smalltalk,这显得...

  • Python元类

    1. 类也是对象 在大多数编程语言中,类就是一组用来描述如何生成一个对象的代码段。在Python中这一点仍然成立:...

  • Python元类

    类也是对象 在Python中一切都是对象,类也不例外。所以可以对类进行以下操作。1.可以当做参数传递2.可以添加属...

网友评论

      本文标题:Python元类

      本文链接:https://www.haomeiwen.com/subject/oecifhtx.html