ブログの仕上げday38

パイソン日38メタクラス

モジュールEXEC

Execは、内蔵モジュールのpythonであります

それができる「string」にPythonのコードは、グローバル空間またはローカル空間に追加しました

# 参数1: 字符串形式的python代码
# 参数2: 全局名称空间字典
# 参数3: 局部名称空间字典

# 全局名称空间
# # 1.文本形式的python代码
code = '''
global x
x = 10
y = 20
'''

# 2.全局的名称空间 {}
global_dict = {'x': 200}

# 3.局部名称空间 {}
local_dict = {}

exec(code, global_dict, local_dict)
print(global_dict)

--------------------------------------------------------------
# 局部名称空间
# 1.文本形式的python代码
code = '''
x = 100
y = 200
def func():
    pass
'''

# 2.全局的名称空间 {}
global_dict = {}

# 3.局部名称空间 {}
local_dict = {}

exec(code, global_dict, local_dict)
print(local_dict)

二 元类

メタクラスとは何ですか

元のクラスは、クラスのクラスであります

タイプは、タイプはメタクラスすべてのクラスのクラスです

元のクラスアクション

元クラスの生成プロセスがクラスを制御することができ、生産プロセスのクラスは、実際にメタクラスを呼び出す処理であります

役割:

元のクラスは、私たちのコントロールクラスを作成することができます。

元のクラスは、私たちの助けコントロールクラスを呼び出すことができます。

カスタムメタクラスを作成します。

  1. カスタムメタクラス、継承タイプは、そのプロパティとメソッドを導き出します

  2. クラスは、カスタムのメタクラスメタクラスで定義された指定、使用する必要があります

    -class中国(メタクラス= 'カスタムメタクラス'):

#自定义元类
class MyMeta(type):
    def __init__(self,class_name,class_base,class_dict):
        if not class_name.istitle():
            raise TypeError('类的首字母要大写')
            
        #控制类中必须要有注释
        if not class_dict.get('__doc__'):
            raise TypeError('类内部必须注释')
            
        super().__init__(class_name,class_base,class_dict)
          
     def __call__(self,*args,**kwargs):
        #调用__new__() --> 创建一个空对象
        obj = object.__new__(self)
        #会执行__init__(obj,*args,**kwargs)
        obj.__init__(*args,**kwargs)
        return obj
    
class Foo(object,metaclass=MyMeta):
    x =10
    def __init__(self,z,y):
        self.z = z
        self.y = y
        
foo = Foo(1,2)

三つのORM(オブジェクトのマッピングプログラム)

ORMマッピング関係は、データベースを操作するためのプログラミング言語を使用しているとき、あなたが直接操作するオブジェクトモデルのプログラミング言語を使用することができ、リレーショナルモデルオブジェクトモデルのプログラミング言語やデータベースによって確立されます

利点:

1. 使与数据库交互变得简单易行
2. 构造固化数据结构变得简单易行

おすすめ

転載: www.cnblogs.com/samoo/p/11794916.html