元类编程-- metaclass

#类也是对象,type创建类的类
def create_class(name):
    if name == "user":
        class User:
            def __str__(self):
                return "user"
        return User
    elif name == "company":
        class Company:
            def __str__(self):
                return "company"
        return Company

#type动态创建类
# User = type("User", (), {}) #名称,继承(要继承的base类),属性或方法(但是要字典形式)

def say(self):
    return "i am user"
    # return self.name

class BaseClass():
    def answer(self):
        return "i am baseclass"

class MetaClass(type): #继承type为元类
    def __new__(cls, *args, **kwargs):
        return super().__new__(cls, *args, **kwargs)

from collections.abc import *

#什么是元类, 元类是创建类的类 对象<-class(对象)<-type
class User(metaclass=MetaClass):
    def __init__(self, name):
        self.name = name
    def __str__(self):
        return "user"
#python中类的实例化过程,会首先寻找metaclass,通过metaclass去创建user类
#type去创建类对象,实例

if __name__ == "__main__":
    # MyClass = create_class("user")
    # my_obj = MyClass()
    # print(type(my_obj))

    # User = type("User", (BaseClass, ), {"name":"user", "say":say})
    my_obj = User(name="bobby")
    print(my_obj)

原文地址:https://www.cnblogs.com/Erick-L/p/8883614.html

时间: 2024-08-25 00:56:50

元类编程-- metaclass的相关文章

python3 元类编程的一个例子

[引子] 虽然我们可以通过"class"语句来定义"类",但是要想更加细粒度的控制"类"的创建,要使用元类编程才能实现. 比如说我们要实现这样的一个约束.所有项目中用到的类都应该要为它定义的方法提供文档字符字符串.有两条可行 的路径 1):依赖工程师的自觉.自律 让他们在定义每一个方法的时候都为方法增加文档字符串, 2):通过元类来做一些 控制,如果工程师没有为方法提供文档字符,那么就直接报错,直到工程师为方法提供字符串为止. [实现1] 依赖工

python中的元类(metaclass)

认识python中元类的准备工作. 1,首先需要明白一个概念就是python中一切皆为对象. input: class Trick(object): pass print type('1234') print type(1234) print type(Trick()) output: <type 'str'> <type 'int'> <class '__main__.Trick'> 2,什么是新式类,旧式类 知乎上的这篇文章个人表示不错,言简意赅:https://w

python元类编程

什么叫元类?   年轻人先不要在意这些细节.我们一步一步的来! 001. oop的世界里有一句话 "万物皆对象" class Person(object): name=None if __name__=="__main__": i=123 s="hello world" p=Person() print(type(i)) #<class 'int'> print(type(s)) #<class 'str'> print(

第八章python元类编程

1.property动态属性 一般对象中的属性使用单下划线或双下划线开头的都是伪私有类型,对于单下划线开头的属性(表示为protected类型)直接可以通过对象访问,而双下滑线开头的属性(表示private类型)必须使用对象.__类名__私有属性名即可访问 1 class Test: 2 def __init__(self): 3 self.__t1 = "t1" 4 self._t2 = "t2" 5 6 7 test = Test() 8 print(test.

元类编程--property动态属性

from datetime import date, datetime class User: def __init__(self, name, birthday): self.name = name self.birthday = birthday self._age = 0 # def get_age(self): # return datetime.now().year - self.birthday.year @property #动态属性 def age(self): #属性描述符,g

Delphi 类引用 Class Reference 元类 MetaClass 用法

delphi中类引用的使用实例 类引用类引用(Class Reference)是一种数据类型,有时又称为元类(MetaClass),是类的类型的引用.类引用的定义形式如下: class of type 例如: type SomeClass = class of TObject; var AnyObj: SomeClass; TObject = class end; TClass = class of TObject; 下面的例子说明了类引用的用法: program Project1; {$APP

python高级编程之元类(第3部分结束)

# -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' #元编程 #new-style类带来了一种能力,通过2个特殊方法(__new__和__metaclass__)在运行时修改类和对象的定义 #__new__方法 #它是一上元构建程序,每次一个对象被factor类实例化时就调用它 #例如: class A(object): def __new__(cls,): print '__new__' return object

Objective-C对象之类对象和元类对象

作者:wangzz 原文地址:http://blog.csdn.net/wzzvictory/article/details/8592492 转载请注明出处 如果觉得文章对你有所帮助,请通过留言或关注微信公众帐号wangzzstrive来支持我,谢谢! 作为C语言的超集,面向对象成为Objective-C与C语言的最大区别,因此,对象是Objective-C中最重要的部分之一.目前面向对象的语言有很多,Objective-C中的对象又和其他语言中的对象有什么区别呢?下面来简单介绍Objectiv

深入理解python元类

类也是对象 在理解元类之前,你需要先掌握Python中的类.Python 中的类概念借鉴 Smalltalk,这显得有些奇特.在大多数编程语言中,类就是一组用来描述如何生成一个对象的代码段.当然在 Python 中这一点也是成立的. >>> class ObjectCreator(object): ... pass ... >>> my_object = ObjectCreator() >>> print my_object <__main__.