黄a在线观看-黄a在线-黄a大片-黄色片在线看-黄色毛片免费-黄色大片网站

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

詳解python metaclass(元類(lèi))

瀏覽:13日期:2022-07-14 10:20:04

元編程,一個(gè)聽(tīng)起來(lái)特別酷的詞,強(qiáng)大的Lisp在這方面是好手,對(duì)于Python,盡管沒(méi)有完善的元編程范式,一些天才的開(kāi)發(fā)者還是創(chuàng)作了很多元編程的魔法。Django的ORM就是元編程的一個(gè)很好的例子。

本篇的概念和例子皆在Python3.6環(huán)境下

一切都是對(duì)象

Python里一切都是對(duì)象(object),基本數(shù)據(jù)類(lèi)型,如數(shù)字,字串,函數(shù)都是對(duì)象。對(duì)象可以由類(lèi)(class)進(jìn)行創(chuàng)建。既然一切都是對(duì)象,那么類(lèi)是對(duì)象嗎?

是的,類(lèi)也是對(duì)象,那么又是誰(shuí)創(chuàng)造了類(lèi)呢?答案也很簡(jiǎn)單,也是類(lèi),一個(gè)能創(chuàng)作類(lèi)的類(lèi),就像上帝一樣,開(kāi)啟了萬(wàn)物之始。這樣的類(lèi),稱(chēng)之為元類(lèi)(classmeta)。

類(lèi)的定義

對(duì)象是通過(guò)類(lèi)創(chuàng)建的,這個(gè)很好理解。例如下面的代碼:

class Bar(object): passbar = Bar()print(bar, bar.__class__) # <__main__.Bar object at 0x101eb4630> <class ’__main__.Bar’>print(Bar, Bar.__class__) # <class ’__main__.Bar’> <class ’type’>

可以看見(jiàn)對(duì)象 bar 是類(lèi) Bar 創(chuàng)建的實(shí)例。然而 Bar,看起來(lái)卻是由一個(gè)叫 type 的類(lèi)創(chuàng)建的實(shí)例。即 bar <-- Bar < -- type。

上面的例子,對(duì)象是動(dòng)態(tài)創(chuàng)建的,類(lèi)則是通過(guò)關(guān)鍵字 class 聲明定義的。class關(guān)鍵字背后的玄機(jī)是什么呢?

實(shí)際上,class Bar(object) 這樣的代碼,等價(jià)于 Bar = type(’Bar’, (objects, ), {})即類(lèi) type 通過(guò)實(shí)例化創(chuàng)建了它的對(duì)象 Bar,而這個(gè) Bar 恰恰是一個(gè)類(lèi)。這樣能創(chuàng)建類(lèi)的類(lèi),就是 Python 的元類(lèi)。

從創(chuàng)建 Bar 的代碼上來(lái)看,元類(lèi) type 的 __init__ 方法有3個(gè)參數(shù),

第一個(gè)是創(chuàng)建的類(lèi)的名字 第二個(gè)是其繼承父類(lèi)的元類(lèi)列表, 最后就是一個(gè)屬性字典,即該類(lèi)所具有的屬性。

type 元類(lèi)

type是小寫(xiě),因而很容易誤以為它是一個(gè)函數(shù)。通過(guò)help(type)可以看到它的定義如下:

class type(object): ''' type(object_or_name, bases, dict) type(object) -> the object’s type type(name, bases, dict) -> a new type ''' def __init__(cls, what, bases=None, dict=None): # known special case of type.__init__ ''' type(object_or_name, bases, dict) type(object) -> the object’s type type(name, bases, dict) -> a new type # (copied from class doc) ''' pass @staticmethod # known case of __new__ def __new__(*args, **kwargs): # real signature unknown ''' Create and return a new object. See help(type) for accurate signature. ''' pass

如前所述,__init__方法接受三個(gè)參數(shù),type 實(shí)例化的過(guò)程,會(huì)創(chuàng)建一個(gè)新的類(lèi)。創(chuàng)建類(lèi)的代碼來(lái)自 __new__ 方法,它的參數(shù)其實(shí)和 __init__,一樣。至于它們之間有什么關(guān)系,后面再做介紹。目前只要知道,當(dāng)調(diào)用 type 進(jìn)行實(shí)例化的時(shí)候,會(huì)先自動(dòng)調(diào)用 __new__ 方法,然后再接著調(diào)用 __init__方法,在類(lèi)外面來(lái)看,最終會(huì)實(shí)例化一個(gè)對(duì)象,這個(gè)對(duì)象是一個(gè)類(lèi)。

從 type 的定義來(lái)看,它繼承 object,Python3的所有類(lèi),都繼承來(lái)著 object,類(lèi)type 也是 object 的實(shí)例,令人奇怪的是,object 既是類(lèi)也是對(duì)象,它也是由 type實(shí)例化而來(lái)。有一種雞生蛋,蛋生雞的悖論。暫且先不管,只要知道所有類(lèi)的頂級(jí)繼承來(lái)自 object 就好。

自定義元類(lèi)

既然元類(lèi)可以創(chuàng)建類(lèi),那么自定義元類(lèi)就很簡(jiǎn)單了,直接繼承類(lèi) type 即可。先看下面一個(gè)例子:

class MyType(type): passclass Bar(object, metaclass=MyType): passprint(MyType, MyType.__class__) # <class ’__main__.MyType’> <class ’type’>print(Bar, Bar.__class__) # <class ’__main__.Bar’> <class ’__main__.MyType’>

可以看到,Bar在聲明的時(shí)候,指定了其元類(lèi),此時(shí)的類(lèi) Bar 的__class__屬性不再是 type,而是 MyType。即之前定義 Bar 的代碼不再是 Bar = type(’Bar’, (objects, ), {}), 而是 Bar = MyType(’Bar’, (objects, ), {})。創(chuàng)建的元類(lèi)的代碼是MyType = type(’MyType’, (objects, ), {})。

如果一個(gè)類(lèi)沒(méi)有顯示的指定其元類(lèi),那么會(huì)沿著繼承鏈尋找父類(lèi)的元類(lèi),如果一直找不到,那么就使用默認(rèn)的 type 元類(lèi)。

元類(lèi)沖突

每個(gè)類(lèi)都可以指定元類(lèi),但是父類(lèi)和子類(lèi)的元類(lèi)要是一條繼承關(guān)系上的,否則會(huì)出現(xiàn)元類(lèi)沖突。并且這個(gè)繼承關(guān)系中,以繼承最后面的元類(lèi)為其元類(lèi)。

元類(lèi)的查找順序大致為,先查看其繼承的父類(lèi),找到父類(lèi)的元類(lèi)即停止。若直接父類(lèi)沒(méi)有元類(lèi),直到頂級(jí)父類(lèi) object ,此時(shí)父類(lèi)(object)的元類(lèi)是 type(basemetaclass),再看其自身有沒(méi)有指定元類(lèi)(submetaclass),如果指定了元類(lèi)(submetaclass),再對(duì)比這個(gè)子元類(lèi)(submetaclass)和父元類(lèi)(basemetaclass),如果它們毫無(wú)繼承關(guān)系,那么將會(huì)拋出元類(lèi)沖突的錯(cuò)誤。如果指定的子元類(lèi)是父元類(lèi)的父類(lèi),那么將會(huì)使用父元類(lèi),否則將使用期指定的子元類(lèi)。

即 submetaclass <- basemetaclass使用 submetaclass 作為最終元類(lèi),若 basemetaclass <- submetaclass, 使用 basemetaclass 作為最終元類(lèi),兩者無(wú)繼承關(guān)系,拋出沖突。

有點(diǎn)像繞口令,且看代碼例子

class MyType(type): pass# 等價(jià)于 MyType = type(’MyType’, (object, ), {})class Bar(object, metaclass=MyType): pass# 等價(jià)于 Bar = MyType(’Bar’, (object, ), {})class Foo(Bar): pass# 等價(jià)于 Foo = MyType(’Foo’, (Foo, object, ), {})print(Bar, Bar.__class__) # <class ’__main__.Bar’> <class ’__main__.MyType’>print(Foo, Foo.__class__) # <class ’__main__.Foo’> <class ’__main__.MyType’>

Bar的父元類(lèi)(basemetaclass)type,指定子元類(lèi)(submetaclass)是 MyType, MyType 繼承自 type,所以Bar的元類(lèi)是 MyType。

又如:

class MyType(type): passclass Bar(object, metaclass=MyType): passclass Foo(Bar, metaclass=type): passprint(Bar, Bar.__class__) # <class ’__main__.Bar’> <class ’__main__.MyType’>print(Foo, Foo.__class__) # <class ’__main__.Foo’> <class ’__main__.MyType’>

盡管 Foo 也指定了元類(lèi)(submetaclass) type,可是其父類(lèi)的元類(lèi)(basemetaclass)是 MyType, MyType是 type的子類(lèi),因此 Foo的元類(lèi)拋棄了指定的(submetaclass) type,而是沿用了其父類(lèi)的MyType。

當(dāng) submetaclass 和 basemetaclass 沒(méi)有繼承關(guān)系的時(shí)候,將會(huì)元類(lèi)沖突

class MyType(type): passclass MyOtherType(type): passclass Bar(object, metaclass=MyType): passclass Foo(Bar, metaclass=MyOtherType): pass

運(yùn)行代碼,當(dāng)定義的時(shí)候就會(huì)出現(xiàn)TypeError: metaclass conflict: the metaclass of a derived class must be a (non-strict)元類(lèi)沖突的錯(cuò)誤。

修改代碼如下:

class MyType(type): passclass MyOtherType(MyType): passclass Bar(object, metaclass=MyType): passclass Foo(Bar, metaclass=MyOtherType): passprint(Bar, Bar.__class__) # <class ’__main__.Bar’> <class ’__main__.MyType’>print(Foo, Foo.__class__) # <class ’__main__.Foo’> <class ’__main__.MyOtherType’>

可以看到 Bar 和 Foo 分別有自己的元類(lèi),并且都符合繼承關(guān)系中尋找。再調(diào)換一下元類(lèi)看看:

class MyType(type): passclass MyOtherType(MyType): passclass Bar(object, metaclass=MyOtherType): passclass Foo(Bar, metaclass=MyType): passprint(Bar, Bar.__class__) # <class ’__main__.Bar’> <class ’__main__.MyOtherType’>print(Foo, Foo.__class__) # <class ’__main__.Foo’> <class ’__main__.MyOtherType’>

都使用了Foo還是使用了元子類(lèi)作為元類(lèi)。究其原因,其實(shí)也很好理解。定義父類(lèi)的時(shí)候,使用了元類(lèi)MyOtherType 。定義子類(lèi)的時(shí)候,通過(guò)繼承,找到了創(chuàng)建父類(lèi)的元類(lèi),那么父類(lèi)就是 MyOtherType 的實(shí)例。

如果使用 MyType 做為元類(lèi),那么他就是 MyType 的實(shí)例,MyType的實(shí)例會(huì)比MyOtherType具有的屬性少,那么在繼承鏈上,它又是 Bar的子類(lèi),這樣看就是子類(lèi)比父類(lèi)還狹窄了,顯然不是一個(gè)好的關(guān)系。即變成了下面的關(guān)系

Bar <- MyOtherType | ↑ | | ↓ |

Foo <- MyType

因此當(dāng) MyType 是 MyOtherType的父類(lèi)的時(shí)候,即使 Foo 指定了 MyType作為元類(lèi),還是會(huì)被忽略,使用其父元類(lèi)MyOtherType。

上面的線的箭頭要一直,才能使用各自指定的元類(lèi),否則使用箭頭指向的那個(gè)類(lèi)作為元類(lèi)。元類(lèi)沒(méi)有繼承關(guān)系,元類(lèi)沖突。

對(duì)象(類(lèi))實(shí)例化

目前為止,我們了解了類(lèi)的定義,即類(lèi)是如何被元類(lèi)創(chuàng)建出來(lái)的,但是創(chuàng)建的細(xì)節(jié)尚未涉及。即元類(lèi)是如何通過(guò)實(shí)例化創(chuàng)建類(lèi)的過(guò)程。這也是對(duì)象創(chuàng)建的過(guò)程。

前文介紹了一個(gè)對(duì)象是通過(guò)類(lèi)創(chuàng)建的,類(lèi)對(duì)象是通過(guò)元類(lèi)創(chuàng)建的。創(chuàng)建類(lèi)中,會(huì)先調(diào)用元類(lèi)的__new__方法,設(shè)置其名稱(chēng),繼承關(guān)系和屬性,返回一個(gè)實(shí)例。然后再調(diào)用實(shí)例的__init__方法進(jìn)行初始化實(shí)例對(duì)象。

class MyType(type): def __init__(self, *args, **kwargs): print(’init ’, id(self), args, kwargs) def __new__(cls, *args, **kwargs): print(’new’, id(cls), args, kwargs) instance = super(MyType, cls).__new__(cls, *args, **kwargs) print(id(instance)) return instanceclass Bar(object, metaclass=MyType): pass

運(yùn)行代碼可以看見(jiàn)輸出:

new 4323381304 (’Bar’, (<class ’object’>,), {’__module__’: ’__main__’, ’__qualname__’: ’Bar’}) {}4323382232init 4323382232 (’Bar’, (<class ’object’>,), {’__module__’: ’__main__’, ’__qualname__’: ’Bar’}) {}

注意,上面代碼僅關(guān)注 Bar 類(lèi)的創(chuàng)建,即 Bar =MyType(’Bar’, (object, ), {})這個(gè)定義代碼。MyType進(jìn)行實(shí)例化創(chuàng)建 Bar的過(guò)程中,會(huì)先用 其 __new__ 方法,后者調(diào)用了父類(lèi) type的 __new__方法,并返回了元類(lèi)的實(shí)例, 同時(shí)調(diào)用這個(gè)實(shí)例的__init__方法,后者對(duì)改實(shí)例對(duì)象進(jìn)行初始化。這也就是為什么方法名為 __init__。

通常我們會(huì)在 __init__方法初始化一些實(shí)例對(duì)象的屬性如果 __new__ 方法什么也不返回,那么 __init__ 方法是不會(huì)被調(diào)用的。

instance = super(MyType, cls).__new__(cls, *args, **kwargs), 有的地方也喜歡寫(xiě)成 type.__new__或者 type,前者是python中如何調(diào)用父類(lèi)方法的問(wèn)題,后者是直接使用type創(chuàng)建類(lèi)的過(guò)程。比較推薦的寫(xiě)法還是使用 super 調(diào)用其父類(lèi)的方法的方式。

類(lèi)是元類(lèi)的對(duì)象,普通類(lèi)創(chuàng)建對(duì)象的過(guò)程,也是一樣。因此,只要重寫(xiě) __new__方法,還可以實(shí)現(xiàn)一個(gè)類(lèi)還可以創(chuàng)建另外一個(gè)類(lèi)的實(shí)例的魔法。

移花接木

重寫(xiě) __new__ 方法,讓其創(chuàng)建另外一個(gè)類(lèi)的實(shí)例。

class Bar: def __init__(self, name): self.name = name print(’Bar init’) def say(self): print(’say: Bar {}’.format(self.name))class Foo(object): def __init__(self): print(’self {}’.format(self)) def __new__(cls, *args, **kwargs): instance = super(Foo, cls).__new__(Bar, *args, **kwargs) print(’instance {}’.format(instance)) instance.__init__(’a class’) return instance def say(self): print(’say: Foo’)m = Foo()print(’m {}’.format(m))m.say()

輸出

instance <__main__.Bar object at 0x104033240>Bar initm <__main__.Bar object at 0x104033240>say: Bar a class

在類(lèi) Foo 中,通過(guò)重寫(xiě) __new__返回了一個(gè) Bar 類(lèi)的實(shí)例對(duì)象,然后調(diào)用 Bar 實(shí)例的 __inti__ 方法初始化,由于返回了 bar 實(shí)例,因此 Foo 的實(shí)例沒(méi)有被創(chuàng)建,因此也不會(huì)調(diào)用它的實(shí)例方法 __inti__ 。這樣就把 移花(Bar)接木(Foo)上了。

也許有人會(huì)覺(jué)得這樣的詭異魔法有什么用呢?實(shí)際上,Tornado框架使用了這樣的技術(shù)實(shí)現(xiàn)了一個(gè)叫 Configurable 的工廠類(lèi),用于創(chuàng)建不同網(wǎng)絡(luò)IO下的epoll還是select模型。有興趣可以參考其實(shí)現(xiàn)方式。

元類(lèi)的應(yīng)用

討論了那么多原理的東西,最后肯定是要應(yīng)用到實(shí)際中才有意義。既然類(lèi)可以被動(dòng)態(tài)的創(chuàng)建,那么很多定義在類(lèi)的方法,豈不是也可以被動(dòng)態(tài)的創(chuàng)建了呢。這樣就省去了很多重復(fù)工作,也能實(shí)現(xiàn)酷酷的元編程。

元類(lèi)可以創(chuàng)建單例模式,也可以用來(lái)實(shí)現(xiàn) ORM,下面介紹的是Django使用元類(lèi)實(shí)現(xiàn)的查找方式。更經(jīng)典的model定義網(wǎng)上有很多例子,就不再介紹了。下面介紹一個(gè)model通過(guò)manger管理器實(shí)現(xiàn)查詢(xún)方法的例子

import inspectclass QuerySet: def get(self, *args, **kwargs): print(’get method’) return self def filter(self, *args, **kwargs): print(’filter method’) return selfclass BaseManager: def __init__(self): pass @classmethod def from_queryset(cls, queryset_class, class_name=None): if class_name is None: class_name = ’%sFrom%s’ % (cls.__name__, queryset_class.__name__) class_dict = { ’_queryset_class’: queryset_class, } class_dict.update(cls._get_queryset_methods(queryset_class)) return type(class_name, (cls,), class_dict) def get_queryset(self): return self._queryset_class() @classmethod def _get_queryset_methods(cls, queryset_class): def create_method(name, method): def manager_method(self, *args, **kwargs):return getattr(self.get_queryset(), name)(*args, **kwargs) manager_method.__name__ = method.__name__ manager_method.__doc__ = method.__doc__ return manager_method new_methods = {} for name, method in inspect.getmembers(queryset_class, predicate=inspect.isfunction): if hasattr(cls, name):continue queryset_only = getattr(method, ’queryset_only’, None) if queryset_only or (queryset_only is None and name.startswith(’_’)):continue new_methods[name] = create_method(name, method) return new_methodsclass Manager(BaseManager.from_queryset(QuerySet)): passclass ModelMetaClass(type): def __new__(cls, *args, **kwargs): name, bases, attrs = args attrs[’objects’] = Manager() return super(ModelMetaClass, cls).__new__(cls, name, bases, attrs)class Model(object, metaclass=ModelMetaClass): passclass User(Model): passUser.objects.get()User.objects.filter()User.objects.filter().get()

這樣model就用使用期管理器Manger 下的方法了。通過(guò)model的元類(lèi)ModelMetaClass,定義model的時(shí)候,就初始化了一個(gè) Manger對(duì)象掛載到Model下面,而定義Manger的時(shí)候,也通過(guò)元類(lèi)將QuerySet下的查詢(xún)方法掛載到Manger下了。

總結(jié)

Python里一切都是對(duì)象,對(duì)象都是由類(lèi)進(jìn)行創(chuàng)建實(shí)例化而來(lái)。既然一切是對(duì)象,那么類(lèi)也是對(duì)象,而類(lèi)這種對(duì)象又是由一種更高級(jí)類(lèi)創(chuàng)建而來(lái),即所謂的元類(lèi)。

元類(lèi)可以創(chuàng)建類(lèi),Python默認(rèn)的元類(lèi)是 type。通過(guò)繼承type,可以自定義元類(lèi),在自定義元類(lèi)的時(shí)候定義或者重載 __new__,可以創(chuàng)建該類(lèi)的實(shí)例對(duì)象,同時(shí)也可以修改類(lèi)創(chuàng)建對(duì)象的行為。類(lèi)通過(guò) __new__創(chuàng)建實(shí)例對(duì)象,然后調(diào)用實(shí)例對(duì)象的 __init__初始化實(shí)例對(duì)象。

在使用自定義元類(lèi)的時(shí)候,子類(lèi)的的元類(lèi)和父類(lèi)的元類(lèi)有關(guān)系,前者指定的元類(lèi)必須和父類(lèi)的元類(lèi)是一個(gè)繼承關(guān)系上的,否則會(huì)出現(xiàn)元類(lèi)沖突。子類(lèi)選取元類(lèi)的取決于指定的元類(lèi)和父元類(lèi)的繼承關(guān)系,子元類(lèi)若是父元類(lèi)的子類(lèi),則指定的元類(lèi)為子元類(lèi),否則將會(huì)被忽略,使用父元類(lèi)為其元類(lèi)。

元類(lèi)是元編程的一種技術(shù)手段,常用于實(shí)現(xiàn)工廠模式的策略。通過(guò)定義元類(lèi)動(dòng)態(tài)創(chuàng)建類(lèi)和展開(kāi),可以實(shí)現(xiàn)很多設(shè)計(jì)精妙的應(yīng)用。ORM 正式其中一種常用的方法。

以上就是詳解python metaclass(元類(lèi))的詳細(xì)內(nèi)容,更多關(guān)于python metaclass(元類(lèi))的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 久久99精品一区二区蜜桃臀 | www.麻豆av| 国产精品久久免费视频 | 粉嫩欧美一区二区三区 | 国产精品入口尤物 | 九九热re | 亚洲乱码国产乱码精品精剪 | 国模自拍视频 | 天堂亚洲2017在线观看 | 国产成人手机高清在线观看网站 | 狠狠躁日日躁夜夜躁影院 | 成年视频免费高清在线看 | 日韩中文字幕二区 | 国产一区在线视频观看 | 色婷婷一区二区三区av免费看 | 欧美性大战久久久久久久 | 草草在线观看视频 | 男女吃奶做爰猛烈紧视频 | 69日本xxxxxxxx96| 高潮久久久久久久久 | 国产日产久久高清欧美 | 亚洲国产一区二区在线 | www蜜臀| 欧美人狂配大交3d怪物一区 | 就爱啪啪网 | 18禁真人抽搐一进一出在线 | 国产在线视频一区二区三区 | 女人夜夜春精品a片 | 日本按摩片色xxxx | 国产日韩av免费无码一区二区三区 | 都市激情男人天堂 | 亚洲精品欧美精品 | 丝袜美腿一区二区三区 | 国产精品日韩专区 | 国产一二精品 | 亚洲午夜无码av毛片久久 | 男人的天堂a在线 | 高清视频一区二区三区 | a级在线看 | 日本精品久久久久中文字幕乱中年 | 亚洲爱色 | 午夜影院免费体验区 | 欧美一区二区视频在线观看 | www日韩在线观看 | 成人激烈床戏免费观看网站 | 国产femdom调教557 | 欧美午夜一区二区三区免费大片 | 成人国产精品入口免费视频 | 99热国产精品 | 久久免费公开视频 | 免费一区二区三区视频在线 | 97se狠狠狠狠狼鲁亚洲综合色 | ass亚洲熟妇毛耸耸pics | 亚洲国产综合色产精品色在线 | 久久久国产一区二区三区四区 | 亚洲人成电影在线观看影院 | 亚洲在线精品视频 | 麻花豆传媒mv在线观看网站 | 国产不卡网 | 天天搞天天 | 99久久精品一区二区成人 | 日韩乱淫 | jvid福利写真一区二区三区 | 日韩毛片无码永久免费看 | 精品久久九九 | 欧美午夜精品久久久久免费视 | 欧美日韩亚洲激情 | 熟女人妻aⅴ一区二区三区60路 | 拍真实国产伦偷精品 | 欧美日韩精品区 | 国色天香一卡2卡三卡4卡乱码 | 97看片吧| 久热这里有精品 | 中文在线资源新版8 | 亚洲精品久久激情国产片 | 国产又黄又硬又粗 | 九九精品在线播放 | 亚洲区免费中文字幕影片|高清在线观看 | 三级自拍 | 99久久久精品免费观看国产 | av无码人妻一区二区三区牛牛 | 久久手机免费视频 | 精品无码一区二区三区水蜜桃 | 色老板精品视频在线观看 | 亚洲人午夜射精精品日韩 | 精品久久久无码中文字幕边打电话 | 九九热在线精品视频 | 亚洲精品久久久蜜臀 | 久久激情久久 | 337p粉嫩大胆色噜噜噜 | 一本久久知道综合久久 | 曰韩在线| 欧美一区2区三区4区公司 | 久久精品一区二区三区不卡牛牛 | 欧美疯狂做受xxxx高潮小说 | 男男车车的车车网站w98免费 | 亚洲精品久久久久久久久久久久久久 | 国产伦久视频免费观看视频 | 国产av激情无码久久 | 国产精品国产a级 | 麻豆成人91精品二区三区 | 2022久久国产露脸精品国产 | 狠狠色综合激情丁香五月 | 毛片91| 婷婷丁香综合 | 国产精品久久久久影院色老大 | 男人的天堂视频 | av午夜影院 | 免费久久精品 | 日本老年老熟无码 | 91 在线观看| 性精品| 少妇激情四射 | 黄色午夜视频 | 自拍三级| 欧美性猛交xxxx乱 | 永久免费未满蜜桃 | 香蕉网站在线观看 | 亚洲福利午夜 | 精品久久久久久久久久中文字幕 | 免费看小12萝裸体视频国产 | 国产精品第二页 | 永久免费未网 | 亚洲男人天堂网站 | 偷窥目拍性综合图区 | 韩国三级在线看 | 女同激情久久av久久 | 处破女av一区二区 | 久久精品欧美日韩 | 香蕉人妻av久久久久天天 | 久草免费新视频 | www.青青草.com | 麻豆精品国产精华精华液好用吗 | 亚洲人成网亚洲欧洲无码 | 欧美日韩在线视频 | 国产日本一级二级三级 | 免费无码一区二区三区蜜桃大 | 少妇太爽了在线观看 | 午夜视频在线免费观看 | 操皮视频 | 成人欧美一区二区三区动漫 | 国产suv精品一区二区6 | blacked精品一区国产在线观看 | 久久精品99国产精品酒店日本 | av老司机在线播放 | 91网站免费 | 欧美亚洲综合在线 | 中文字幕av久久 | 熟妇与小伙子matur老熟妇e | 911美女片黄在线观看游戏 | 毛片毛片毛片毛片 | 国产精品无码专区av在线播放 | 亚洲人成网亚洲欧洲无码久久 | 亚洲色图图 | 另类视频在线观看+1080p | 天天插天天操天天干 | 少妇人妻丰满做爰xxx | 国产最爽乱淫视频国语对白 | 国产成人午夜福利在线观看 | 国产黄a三级三级三级看三级男男 | 中文无码久久精品 | av官网在线| 国产真实乱人偷精品视频 | 在线观看av播放 | 老子影院午夜伦不卡大全 | 成在人线av无码免观看麻豆 | 国产小精品 | 色偷偷免费视频 | 久久久久久久久国产 | 国产女人乱人伦精品一区二区 | 女警一级淫片免费放 | 国产crm系统91在线 | 久久精品一区二区三区不卡牛牛 | 妹子干综合网 | 中国人与拘一级毛片 | 宅男的天堂 | 777毛片| 日本sm/羞辱/调教/捆绑视频 | 国产精品久久久久久久久久久久久 | 国产欧美日韩亚洲 | 中文字幕日韩在线视频 | 免费精品人在线二线三线 | 在线免费看av | 欧美亚洲免费 | 美女野外找人搭讪啪啪 | 日本人又黄又爽又大又色 | 欧美精品一区二区三区蜜臀 | 久久和欧洲码一码二码三码 | 国产日韩精品在线观看 | 激情视频一区 | 在线免费观看视频黄 | 97精品伊人久久久大香线蕉 | 久久久久久免费 | 日韩av高清在线观看 | 醉酒后少妇被疯狂内射视频 | 无码日韩人妻精品久久蜜桃 | 小sao货水好多真紧h国产 | 国产成人a在线观看视频 | 伊人春色网 | 亚洲日韩第一页 | 亚洲综合久久一区二区 | 少妇做爰免费视频了 | 色女人网 | 日韩国产精品视频 | 人禽伦免费交视频播放 | 少妇媚药按摩中文字幕 | 黑人巨大精品欧美一区二区小视频 | 东日韩二三区 | 国产第99页 | 17c国产精品 | 国内一区二区 | 午夜三级做爰视频在线看 | 丰满孕妇性春猛交xx大陆 | 天天摸天天射 | www.日批| 免费观看激色视频网站 | 91九色丨porny丨丰满6 | 国内久久精品视频 | 狠狠躁18三区二区一区 | 欧美性做爰毛片 | 日本午夜免费 | 999精品视频一区二区三区 | 亚洲国产aⅴ成人精品无吗 亚洲国产aaa | 成色网| 精品人妻av区乱码 | 国产粉嫩呻吟一区二区三区 | 色噜噜在线播放 | 97精品视频 | 欧美日韩乱国产 | 青青青在线免费观看 | 中国少妇内射xxxhd免费 | 高清国产mv在线观看 | 亚洲调教欧美在线 | 中文天堂在线视频 | 成年人黄色大全 | 成人年无码av片在线观看 | 国产精品亚洲一区二区三区 | 亚洲毛片一区二区三区 | 图片区亚洲色图 | 在线观看麻豆av | 日韩精品xxx | 超碰免费在 | 精品色图| 亚洲国产精品二区 | 日韩av无码中文无码不卡电影 | 亚洲免费视频一区 | 日韩一区二区免费视频 | 亚洲精品在线免费观看视频 | 国产资源在线观看 | 午夜熟女毛片蜜桃传媒 | 日韩在线一区二区三区影视 | 日韩人妻熟女毛片在线看 | 一级做a免费视频 | 久久www免费人成精品 | 国产在线精品一区二区 | 亚洲性色av私人影院无码 | 亚洲成av人片天堂网老年人 | 免费高清欧美大片在线观看 | 一级免费黄色片 | 亚洲精品乱码久久久久久 | 伊人青青草视频 | 日韩精品视频免费专区在线播放 | 亚洲精品乱码久久久久久蜜桃麻豆 | 亚洲天堂自拍偷拍 | 久久日韩国产精品免费 | 九色影视 | 狠狠久久亚洲欧美专区 | 国产放荡对白视频一区二区 | 亚洲成av人片在线观看无 | 亚洲欧洲一区二区 | 国产全肉乱妇杂乱视频 | 亚洲精品国产综合99久久夜夜嗨 | 国产一级做a爱片久久毛片a | 影音先锋资源av不撸 | 国产又黄又猛又粗又爽视频 | 精品少妇3p | 图片区偷拍区小说区 | 国产精品视频在线观看 | 国产裸体美女视频全黄 | 国产精品偷伦小说 | 成人免费观看网站 | 亚洲精品无播放器在线播放 | 欧美性猛交99久久久久99按摩 | 人妻少妇乱子伦精品无码专区电影 | 国产欧美精品一区二区在线播放 | 在线观看国产精品普通话对白精品 | 欧美黑人最猛性bbbbb | www中文在线 | 成品人视频ww入口 | 日躁夜躁狠狠躁2001 | 7777奇米四色眼影国产馆 | 我要干成人网 | 少妇无码av无码专区在线观看 | 久久亚洲精品中文字幕 | 久久久性视频 | 年代肉高h喷汁呻吟快穿 | 中文不卡在线 | 日日摸日日碰夜夜爽无码 | 日本一区二区三区在线观看 | 最新国产中文字幕 | 一女三黑人理论片在线 | 精品日韩中文字幕 | 成年午夜精品久久久精品 | 日日摸夜夜骑 | 色偷偷噜噜噜亚洲男人的天堂 | 黄网页在线观看 | 日本三级韩国三级欧美三级 | 蜜乳av一区二区 | 伊人网成人 | 亚洲欧美国产一区二区三区 | 精品国产一区二区三区四区在线看 | 色综合视频一区二区三区 | 欧美日韩在线播放三区四区 | 人妻熟人中文字幕一区二区 | 自拍偷拍亚洲区 | 亚洲国产成人aⅴ毛片大全密桃 | 波多野结衣国产在线 | 在线免费黄网 | 国产精品第2页 | 91看片一区二区三区 | 国产精品免费看久久久8精臀av | 国产精品免费福利久久 | 高清一区在线观看 | 国产乱淫av片 | 超碰2022| 黑人巨大精品欧美一区二区奶水 | 一本加勒比波多野结衣 | 久久精品亚洲一区二区三区浴池 | 性xxxx欧美老妇胖老太性多毛 | 国产农村妇女露脸对白视频 | 少妇系列av| 成人性做爰aaa片免费看曹查理 | 少妇寂寞小伙满足少妇在线观看 | 国产成人无码免费视频在线 | 日韩色图在线观看 | 亚洲视频网站在线观看 | 亚洲第一在线综合网站 | 日韩av高清在线看片 | 网址av| 国产精品色综合一区二区三区 | www白浆 | 欧美黄色三级视频 | 91在线影院| 欧美激情一区二区三区蜜桃视频 | 野花社区www视频最新资源 | 岛国av动作片 | 日本人六九视频69jzz免费 | 日韩经典在线观看 | 国产精品成人免费精品自在线观看 | 婷婷四房综合激情五月 | 青青青操| 国产亚洲精久久久久久无码 | 三级毛片子 | 国产精品av一区二区三区网站 | 青青青国产视频 | 瑟瑟久久 | 午夜精品美女久久久久av福利 | 欧美一区二区三区性视频 | 欧美一区二区三区四区五区六区 | 亚洲免费色图 | 久久精品国产亚卅av嘿嘿 | 色吧视频 | 亚洲天堂男人的天堂 | 直接观看黄网站免费视频 | 欧美内谢 | 高清国产精品人妻一区二区 | 一级黄色网 | 26uuu国产 | 99色图| 国产精品久久久久久影院8一贰佰 | 国偷自产av一区二区三区小尤奈 | 国产一级淫片a | 国产精品一区一区 | 在线你懂的视频 | 亚洲久久综合 | 精品久久8x国产免费观看 | 亚洲综合在线观看视频 | 对白刺激国产子与伦 | 国产精品日本一区二区在线播放 | 亚洲精品中文字幕无码蜜桃 | 黑鬼大战白妞高潮喷白浆 | 开心激情婷婷 | 最近日本免费观看高清视频 | 国产精品久久久久久久久久直播 | 国产又大又粗又长 | 中国精学生妹品射精久久 | 日韩一区二区三区视频在线 | 欧美亚洲国产成人一区二区三区 | 91gao| 免费人成又黄又爽又色 | 与黑人高h系列辣文 | 亚洲中文字幕高清有码在线 | 好吊一区二区三区 | 中文字幕在线免费播放 | 成人亚洲欧美成αⅴ人在线观看 | 国产成人在线观看免费网站 | 特黄特黄视频 | 国产又色又爽又刺激在线观看 | 日本午夜大片 | 女女女女女裸体处开bbb | 国产视频久久久久 | 日日射影院| 中国美女一级黄色片 | 国内大量揄拍人妻精品視頻 | 国产丝袜久久 | 欧美二区乱c黑人 | 亚洲最大中文字幕无码网站 | 寂寞寡妇让我吃奶 | 18pao国产成视频永久免费 | 国产av一区二区三区传媒 | 国产精品一区二区欧美 | 欧美激情一区二区三区 | 777爽死你无码免费看一二区 | 色站综合 | 国产午夜精品一区二区三 | 一级中文字幕 | 国产成人精品自拍 | 日本少妇影院 | 日本少妇做爰全过程毛片 | 国产免费拔擦拔擦8x网址 | 久久精品国产一区二区 | 天天爽影院 | ktv偷拍视频一区二区 | 日韩精品99久久久久中文字幕 | 四虎wwwaa884成人精品视频 | 日韩一卡2卡3卡4卡2021免费观看国色天香 | 天堂在线精品 | 69精品丰满人妻无码视频a片 | 国产精品网址 | 天海翼一区 | 免费啪视频 | 中文字幕亚洲日韩无线码 | 精品国产乱码一区二区三区 | 亚洲精品乱码一区二区三区 | 超碰人人人人人人 | 香蕉人人超人人超碰超国产 | 麻豆国产av超爽剧情系列 | 三区在线视频 | 久久伊人精品一区二区三区 | 中文字幕人成无码人妻 | 日本免费三区 | 男女一进一出粗大楱视频 | 超碰在线香蕉 | 老头边吃奶边弄进去呻吟 | 成人啪啪18免费网站 | 男女啪啪做爰高潮无遮挡 | 黑人巨茎大战白人美女 | 一区二区小说 | 国产亚洲精品久久久456 | 后进极品美女白嫩翘臀 | 人人摸人人搞人人透 | 久久夜色精品亚洲 | 亚洲熟妇中文字幕五十中出 | 黄网在线观看视频 | 玖玖爱在线观看 | 无码中文字幕色专区 | 国产传媒av在线 | 亚欧洲精品在线视频免费观看 | 国产偷自拍| 亚洲色图.com| 国产黄色激情视频 | 日本熟妇大乳 | 在线观看人成视频免费 | 国产淫语对白粗口video | 午夜成人亚洲理论片在线观看 | 长河落日电视连续剧免费观看01 | 嫩草影院入口污在线 | 97在线观看视频 | 狠狠摸狠狠澡 | 久久久久日韩精品久久久男男 | 都市激情 在线 亚洲 国产 | 姑娘第5集在线观看免费 | 亚洲熟妇无码av在线播放 | 国产后门精品视频 | 无遮挡啪啪摇乳动态图gif | 免费特级黄色片 | 神马久久午夜 | 91精品婷婷国产综合久久 | 国产又黄又猛又粗又爽的视频 | 与亲女洗澡时伦了毛片 | 国产md视频一区二区三区 | 新婚夜第一次深深挺进 | 国产精品主播在线 | 国产精品久久二区二区 | 91绿帽黑人系列一区 | 免费毛片一区二区三区 | 亚洲深夜在线 | 成年美女黄网站色大免费全看 | 亚洲色图p | 超碰99在线| 色播在线播放 | 国产成a人亚洲精品无码樱花 | 亚洲福利小视频 | 久久成人免费网站 | 国产视频一区二区三区四区五区 | 亚洲欧美又粗又长久久久 | 久久精品店| 欧美一道本 | 51国偷自产一区二区三区 | 免费看a| 精品无码午夜福利理论片 | 国内自拍区 | 韩日黄色 | 国产精品对白刺激蜜臀av | 天堂资源网 | 亚洲成人手机在线 | 蜜桃视频在线观看污 | 国产丝袜一区二区三区 | 变态另类先锋影音 | 免费播放一区二区三区 | 久久看视频 | 国产成人免费高清激情视频 | 国产精品白嫩白嫩大学美女 | 国产无套粉嫩白浆内谢在a 国产无套粉嫩白浆内谢在线 | 国产精品高潮呻吟久久av黑人 | 免费在线黄色av | 日本19禁啪啪无遮挡网站 | 久久久久久国产精品免费免费 | 一区二区三区日韩在线 | 亚洲国产精品第一区二区 | 日韩综合在线视频 | 日本一级淫片免费放 | 俄罗斯15一18性视频 | 欧美a级网站 | 制服丝袜天堂网 | 秋霞三区 | 成人瑟瑟 | 天堂网8| 在线免费成人 | 一级aaa级毛片午夜在线播放 | 日韩精品在线不卡 | 亚洲乱亚洲乱妇无码 | 伊人手机视频 | 成人欧美一区二区三区黑人一 | 亚洲三级欧美 | 国产成人精品午夜视频免费 | 中文无码一区二区不卡αv 精品少妇人妻av免费久久洗澡 | 女人爽到高潮潮喷18禁网站 | 特黄特色的大片观看免费视频 | av在线播放一区二区三区 | 国产欧美日韩综合 | 在线欧美中文字幕农村电影 | 亚洲一二三四区 | 欧洲a老妇女黄大片 | 免费无码成人av片在线在线播放 | 欧美 日韩 国产 亚洲 色 | 久久免费高清视频 | 狂野欧美激情性xxxx | 日韩精品免费在线 | 无码日韩精品一区二区免费 | 日本黄色片免费看 | av永久免费观看 | 91精品在线一区 | 亚洲爱爱爱 | 涩涩网站在线观看 | 欧美一级a俄罗斯毛片 | 亚洲国产精品成人va在线观看 | 亚洲国产高清在线观看视频 | 亚洲插插| 青青草久久久 | 狠狠躁天天躁中文字幕无码 | 天天曰天天爽 | 久久成人免费 | 国产一级手机毛片 | 性生交大全免费看 | 黄色小视频免费看 | 性欧美视频一区二区三区 | 亚洲第一精品在线观看 | 老汉色老汉首页a亚洲 | 男人的天堂免费视频 | 香蕉久久久久久久av网站 | 翘臀少妇后进一区二区 | 欧美色一区二区三区在线观看 | 国精品一区 | 色一情一乱一乱一区99av白浆 | 成人做爰9片免费看网站 | 91亚洲乱码卡一卡二卡新区豆 | 亚洲a∨无码无在线观看 | 久久国产成人精品av | 亚洲美女又黄又爽在线观看 | 久久人人爽亚洲精品天堂 | 国内精品视频一区二区三区 | 超碰人人国产 | 中文字幕亚洲色妞精品天堂 | 成人性生交大片免费看视 | 国产精品一区二区福利视频 | 欧洲av一区二区 | 激情内射亚洲一区二区三区爱妻 | 自拍偷拍色 | 成人免费视频观看视频 | 日韩欧美久久精品 | 午夜在线成人 | 奇米四色在线观看 | 三上悠亚三级 | 国产亚洲精品一区二区三区 | 四虎网站在线 | 少妇又紧又大又色又爽视频 | 狠狠躁18三区二区一区传媒剧情 | 中文字幕在线免费观看 | 日日摸夜夜摸狠狠摸婷婷 | 亚洲人成色77777在线观看 | 亚洲欧洲日本综合aⅴ在线 国语自产偷拍精品视频偷 午夜无码区在线观看 | 国产精品日韩在线 | 欧美国产精品日韩在线 | h成人在线观看 | 国产视频亚洲精品 | 永久免费看动漫黄址 | 久久九九精品国产综合喷水 | 香蕉视频免费在线 | 少妇高潮疯狂叫床在线91 | 99热久久精品免费精品 | 午夜国产一级片 | 国产又爽又黄又无遮挡的激情视频 | 欧美剧场| 99无码熟妇丰满人妻啪啪 |