亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Python > 正文

Python 使用元類type創建類對象常見應用詳解

2019-11-02 14:08:46
字體:
來源:轉載
供稿:網友

本文實例講述了Python 使用元類type創建類對象。分享給大家供大家參考,具體如下:

type("123") 可以查看變量的類型;同時 type("類名",(父類),{類屬性:值,類屬性2:值}) 可以創建一個類。

在Python中不建議一個函數具有不同的功能(重載);type()具有不同的功能是為了兼容之前的版本。

類可以創建實例對象,類對象是由元類創建的。 (元類創建類,類創建實例對象)

type就是元類(type本質上就是一個類)

demo.py(用元類type創建類):

# 通過class關鍵字創建類class MyClass1(object):  name = "張三" # 類屬性 (所有實例對象共用)  age = 23# 通過type創建類。 type()返回的是創建的類對象的引用。Test2 = type("MyClass2",(object,),{"name":"張三","age":23}) # Test2是MyClass2類的引用,一般變量名和類名保持一致。print(Test2()) # <__main__.MyClass2 object at 0x7fa05a4ca9e8>

demo.py(用type創建帶有方法的類):

# 實例方法def print_b(self):  print(self.num)# 靜態方法@staticmethoddef print_static():  print("----haha-----")# 類方法@classmethoddef print_class(cls):  print(cls.num)# 用type創建類B = type("B", (object,), {"num":100, "print_b": print_b, "print_static": print_static, "print_class": print_class})b = B()b.print_b()   # 100b.print_static() # ----haha-----b.print_class()  # 100

元類的應用

在定義一個類的時候可以為其指定__metaclass__屬性(指定創建該類的元類),默認使用type元類創建類對象。

通過指定自定義的元類,可以對類的創建進行攔截??梢詫︻惷⒗^承的父類、屬性(方法)做一些預處理。

例如:將類名大寫,默認繼承object類,添加、修改屬性(方法)名(私有屬性的偽私有化就是通過修改屬性名實現的)。

裝飾器是對函數進行功能擴展(不用修改原代碼),而元類可以對類進行功能擴展(添加額外的屬性/方法)。

demo.py(用函數指定__metaclass__屬性):

#-*- coding:utf-8 -*-def upper_attr(class_name, class_parents, class_attr):  # class_name 會保存類的名字 Foo  # class_parents 會保存類的父類 object  # 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)class Foo(object, metaclass=upper_attr): # python3的方式  # python2.x的方式。  # __metaclass__ = upper_attr # 設置Foo類的元類為upper_attr  bar = 'bip'print(hasattr(Foo, 'bar'))print(hasattr(Foo, 'BAR'))f = Foo()print(f.BAR)

demo.py(用類指定__metaclass__屬性):

class UpperAttrMetaClass(type):  # __new__ 是在__init__之前被調用的特殊方法  # __new__是用來創建對象并返回之的方法  # 而__init__只是用來將傳入的參數初始化給對象  # 你很少用到__new__,除非你希望能夠控制對象的創建  # 這里,創建的對象是類,我們希望能夠自定義它,所以我們這里改寫__new__  # 如果你希望的話,你也可以在__init__中做些事情  # 還有一些高級的用法會涉及到改寫__call__特殊方法,但是我們這里不用  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    # 方法1:通過'type'來做類對象的創建    return type(class_name, class_parents, new_attr)    # 方法2:復用type.__new__方法    # 這就是基本的OOP編程,沒什么魔法    # return type.__new__(cls, class_name, class_parents, new_attr)# python3的用法class Foo(object, metaclass=UpperAttrMetaClass):  bar = 'bip'# python2的用法# class Foo(object):#   __metaclass__ = UpperAttrMetaClass#   bar = 'bip'print(hasattr(Foo, 'bar'))# 輸出: Falseprint(hasattr(Foo, 'BAR'))# 輸出:Truef = Foo()print(f.BAR)# 輸出:'bip'
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
岛国av在线不卡| 亚洲国产一区二区三区四区| 久久免费少妇高潮久久精品99| 日韩精品有码在线观看| 色先锋资源久久综合5566| 久久69精品久久久久久国产越南| 亚洲国产97在线精品一区| 久久综合电影一区| 国产精品日韩在线播放| 91av在线播放| 欧美精品久久一区二区| 91理论片午午论夜理片久久| 亚洲综合社区网| 成人免费在线视频网址| 亚洲aa在线观看| 97在线免费观看| 中文字幕视频在线免费欧美日韩综合在线看| 538国产精品一区二区免费视频| 国产福利精品视频| 97视频在线观看免费高清完整版在线观看| 欧美最顶级丰满的aⅴ艳星| 国产精品久久久久久久久久小说| 亚洲最大激情中文字幕| 亚洲精品日韩在线| 亚洲综合中文字幕68页| 欧美成人免费观看| 这里只有精品丝袜| 亲子乱一区二区三区电影| 免费97视频在线精品国自产拍| 日韩色av导航| 日韩视频免费在线| 在线观看欧美成人| 久久久精品电影| 成人a在线视频| 亚洲深夜福利视频| 97精品国产aⅴ7777| 夜夜嗨av一区二区三区四区| 欧美成人免费小视频| 亚洲一区二区精品| 91精品在线观看视频| 久久综合色影院| 亚洲自拍偷拍视频| 青草热久免费精品视频| 精品无人区乱码1区2区3区在线| 丝袜情趣国产精品| 国产网站欧美日韩免费精品在线观看| 欧美另类在线播放| 97成人在线视频| 色一情一乱一区二区| 78色国产精品| 最近更新的2019中文字幕| 国产成人极品视频| 久久人人看视频| 国产精品久久久久久av下载红粉| 亚洲美女激情视频| 日韩免费视频在线观看| 亚洲国产成人精品电影| 久久九九国产精品怡红院| 欧美日韩国产中文精品字幕自在自线| 色偷偷偷综合中文字幕;dd| 亚洲国产精品电影在线观看| 国产盗摄xxxx视频xxx69| 美女av一区二区三区| 亚洲福利视频二区| 国产精品永久在线| 欧美日本在线视频中文字字幕| 国产精品久久在线观看| 欧美精品国产精品日韩精品| 国产99久久精品一区二区 夜夜躁日日躁| 97在线视频精品| 亚洲免费福利视频| 欧美丰满老妇厨房牲生活| 日韩av电影在线播放| 亚洲第一色在线| 福利一区福利二区微拍刺激| 自拍偷拍亚洲精品| 亚洲精品v欧美精品v日韩精品| 午夜精品理论片| 亚洲国产成人久久综合一区| 国产精品丝袜白浆摸在线| 久久久久久18| 欧美日韩成人在线视频| 国产精品日韩久久久久| 久久久国产在线视频| 久久天堂av综合合色| 国产精品嫩草影院一区二区| 亚洲xxxxx| 国产97人人超碰caoprom| 麻豆乱码国产一区二区三区| 日韩高清有码在线| 久久精品久久久久电影| 亚洲欧美日韩国产成人| 国产精品三级美女白浆呻吟| 精品露脸国产偷人在视频| 国产亚洲激情在线| 国产一区二区三区在线观看视频| 日韩毛片在线观看| 黑人精品xxx一区一二区| 国产69精品久久久久99| 日韩中文在线中文网在线观看| 精品国产91久久久久久老师| 日本中文字幕不卡免费| 欧美人与性动交a欧美精品| 亚州精品天堂中文字幕| 国产精品aaaa| 亚洲国产精品va在看黑人| 国产精品美女主播| 国产精品久久激情| 4k岛国日韩精品**专区| 播播国产欧美激情| 成人国产在线视频| 久久久久久伊人| 尤物yw午夜国产精品视频明星| 亚洲xxx大片| 91产国在线观看动作片喷水| 久久久久久久久久久网站| 国产美女被下药99| 国产精品爽爽爽爽爽爽在线观看| 欧美一区二区三区图| 日韩午夜在线视频| 欧美在线性视频| 亚洲第五色综合网| 欧美大片网站在线观看| 欧美理论片在线观看| 日韩成人中文电影| 欧美一性一乱一交一视频| 这里只有精品视频| 最新国产成人av网站网址麻豆| 欧美大片在线影院| 免费99精品国产自在在线| 亚洲精品一区av在线播放| www欧美xxxx| 国产日韩精品在线播放| 亚洲毛片在线观看| 毛片精品免费在线观看| 国精产品一区一区三区有限在线| 97免费视频在线| 亚洲一区二区三区视频播放| y97精品国产97久久久久久| 日韩中文字幕在线免费观看| 久久深夜福利免费观看| 国产精品久久久久久久7电影| 亚洲人成网站999久久久综合| 国产视频精品久久久| 国产精品视频网站| www国产亚洲精品久久网站| 日韩av在线免费| 亚洲精品乱码久久久久久金桔影视| 亚洲国产精品悠悠久久琪琪| 国产精品麻豆va在线播放| 亚洲福利视频免费观看| 国产日产欧美a一级在线| 九九视频这里只有精品| 91精品国产自产在线老师啪| 日韩av在线免费观看一区| 尤物九九久久国产精品的分类| 精品久久久久久久久久| 中文字幕少妇一区二区三区| 亚洲精品日韩激情在线电影| 欧美中文字幕视频| 日韩av在线免费观看一区| 国产精品久久久久久久天堂| 午夜精品久久久久久99热软件| 欧美高清在线播放|