のオブジェクト指向メタクラス

印刷(「メタクラス」)
###我々は今、クラスの定義
クラスのデモを:
DEF FUNC(自己):
渡す
##オブジェクトのインスタンスを生成
OBJ =デモ()
##を表示するオブジェクトの種類を、結果があることを示しますオブジェクトの型は、オブジェクトのクラス名が属している
(タイプの(OBJ))を印刷 #OBJ =デモ()

私たちはクラスのこのタイプの私たち自身の定義を見れば、この時間は、それがどのようになることを## ???結果

(タイプ(デモ)の)印刷
#結果があることを示しています。<「タイプの」クラス>
#クラスの呼び出しは、我々はそれをこのように解釈することができるかどうか、オブジェクトを生成する前に、彼はコールする一つのことは、このクラスで、その結果、そこにある、デモ=タイプの()

を#まあ、この事は、それは何ですか?
##これは私たちが今メタクラス学ぶために持っているものである

#はタイプ生成され、デフォルトでは、すべてのクラスを作成
メタクラスと呼ばれるクラスの#生成されたクラスを!その型はメタクラスのある

三つの特徴#クラス
「」「
1.クラス名
2.親クラス
3クラスの名前空間
」「」
#の評価およびExecの
#のRESの=「」 "
レンジでの私のために#(5):
印刷#(I)
"

Execの#(RES)
幹部とevalのコード列を識別し、実行することができますが、コードのロジックをサポートしていないのeval


#= CLASS_NAME「ユーザーズ
#class_bases =(オブジェクト)
#RES = "" "
#=学校" Oldboy "
:__init __(自己、名)DEF#
#self.name名=
#DEF FUNC(セルフ):
パス
# """
#class_attrs} = {
#Execの(RES、{}、class_attrs)
#=ユーザータイプ( CLASS_NAME、class_bases、class_attrs)
印刷(ユーザー)
#印刷(User.school)
#OBJ =ユーザー( 'ジェイソン')
印刷(obj.name)
印刷(OBJ)

クラスMymetaClass(タイプ):
DEF __call __(自己、引数*、** kwargsから):
#1。__new__名前空間にオブジェクトを作成し
、名前空間を変更するには#2は、__init__名前の束失った
#3がターゲットに良いリターンを生み出す
#1。空のオブジェクトを生成します
自己.__ = __新しい新しいOBJ(セルフ)
物体2の#インスタンス
セルフ.__のinit __(OBJ、引数*、** kwargsから)
#はオブジェクト3.返し
リターンOBJ
#スーパーのリターンを()を呼び出し.__ __(* argsを、** kwargsから)
クラスのデモ(= MymetaClass)メタクラス:デモメタクラス指定された#がMymetaClassで
合格
OBJ =デモ()
印刷(OBJ)
を印刷(タイプ(OBJ))

"" "
<。0x0000022048F083C8 AT __メイン__デモオブジェクトが>
<クラスの__main__。デモ'>


<0x00000170FB1D82B0 AT __メイン__デモオブジェクト>。
<クラスの__mainで__デモ'>。
"" "




フィールドの鍵ペア審判#テーブル
クラスMemetaClass(タイプ):
DEF __new __(CLS、CLASS_NAME、class_bases、class_attrs):
CLASS_NAME IF = = 'のUserInfo':
昇給の例外TypeError( '私は鳥あなた「)したくない
class_attrsにおけるIF」学校」を:
class_attrs [ '学校'] = '澳门最大线上赌场开业啦'
class_attrs [ 'TABLE_NAME'] = 'userinfoを'
class_attrs [ 'PRIMARY_KEY'] = 'ID'
戻り値の型.__新しい__(CLS、CLASS_NAME、class_bases、class_attrs)
クラスユーザー(オブジェクト、メタクラス= MemetaClass):
学校= 'oldboy'
プリント(ユーザー.__ dict__に)


おすすめ

転載: www.cnblogs.com/1832921tongjieducn/p/10958688.html