婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Python進階學習之帶你探尋Python類的鼻祖-元類

Python進階學習之帶你探尋Python類的鼻祖-元類

熱門標簽:唐山智能外呼系統一般多少錢 廣告地圖標注app 激戰2地圖標注 白銀外呼系統 騰訊外呼線路 哈爾濱ai外呼系統定制 陜西金融外呼系統 海南400電話如何申請 公司電話機器人

Python是一門面向對象的語言,所以Python中數字、字符串、列表、集合、字典、函數、類等都是對象。

利用 type() 來查看Python中的各對象類型

In [11]: # 數字

In [12]: type(10)
Out[12]: int

In [13]: type(3.1415926)
Out[13]: float

In [14]: # 字符串

In [15]: type('a')
Out[15]: str

In [16]: type("abc")
Out[16]: str

In [17]: # 列表

In [18]: type(list)
Out[18]: type

In [19]: type([])
Out[19]: list

In [20]: # 集合

In [21]: type(set)
Out[21]: type

In [22]: my_set = {1, 2, 3}

In [23]: type(my_set)
Out[23]: set

In [24]: # 字典

In [25]: type(dict)
Out[25]: type

In [26]: my_dict = {'name': 'hui'}

In [27]: type(my_dict)
Out[27]: dict

In [28]: # 函數

In [29]: def func():
    ...:     pass
    ...:

In [30]: type(func)
Out[30]: function

In [31]: # 類

In [32]: class Foo(object):
    ...:     pass
    ...:

In [33]: type(Foo)
Out[33]: type

In [34]: f = Foo()

In [35]: type(f)
Out[35]: __main__.Foo

In [36]: # type

In [37]: type(type)
Out[37]: type

可以看出

數字 1int類型 的對象

字符串 abcstr類型 的對象

列表、集合、字典是 type類型 的對象,其創建出來的對象才分別屬于 list、set、dict 類型

函數 funcfunction類型 的對象

自定義類 Foo 創建出來的對象 fFoo 類型,其類本身 Foo 則是 type類型 的對象。

type 本身都是type類型的對象

一、類也是對象

類就是擁有相等功能和相同的屬性的對象的集合

在大多數編程語言中,類就是一組用來描述如何生成一個對象的代碼段。在 Python 中這一點仍然成立:

In [1]: class ObjectCreator(object):
   ...:     pass
   ...:

In [2]: my_object = ObjectCreator()

In [3]: print(my_object)
__main__.ObjectCreator object at 0x0000021257B5A248>

但是,Python中的類還遠不止如此。類同樣也是一種對象。是的,沒錯,就是對象。只要你 使用關鍵字 class,Python解釋器在執行的時候就會創建一個對象。

下面的代碼段:

>>> class ObjectCreator(object):
…       pass
…

將在內存中創建一個對象,名字就是 ObjectCreator。這個 對象(類對象ObjectCreator)擁有創建對象(實例對象)的能力。但是,它的本質仍然是一個對象,于是乎你可以對它做如下的操作:

1.你可以將它賦值給一個變量

2.你可以拷貝它

3.你可以為它增加屬性

4.你可以將它作為函數參數進行傳遞

如下示例:

In [39]: class ObjectCreator(object):
    ...:     pass
    ...:

In [40]: print(ObjectCreator)
class '__main__.ObjectCreator'>

In [41]:# 當作參數傳遞

In [41]: def out(obj):
    ...:     print(obj)
    ...:

In [42]: out(ObjectCreator)
class '__main__.ObjectCreator'>

In [43]: # hasattr 判斷一個類是否有某種屬性

In [44]: hasattr(ObjectCreator, 'name')
Out[44]: False

In [45]: # 新增類屬性

In [46]: ObjectCreator.name = 'hui'

In [47]: hasattr(ObjectCreator, 'name')
Out[47]: True

In [48]: ObjectCreator.name
Out[48]: 'hui'

In [49]: # 將類賦值給變量

In [50]: obj = ObjectCreator

In [51]: obj()
Out[51]: __main__.ObjectCreator at 0x212596a7248>

In [52]:

二、動態地創建類

因為類也是對象,你可以在運行時動態的創建它們,就像其他任何對象一樣。首先,你可以在函數中創建類,使用 class 關鍵字即可。

def cls_factory(cls_name):
    """
    創建類工廠
    :param: cls_name 創建類的名稱
    """
    if cls_name == 'Foo':
        class Foo():
            pass
        return Foo  # 返回的是類,不是類的實例

    elif cls_name == 'Bar':
        class Bar():
            pass
        return Bar

IPython 測驗

MyClass = cls_factory('Foo')

In [60]: MyClass
Out[60]: __main__.cls_factory.locals>.Foo # 函數返回的是類,不是類的實例

In [61]: MyClass()
Out[61]: __main__.cls_factory.locals>.Foo at 0x21258b1a9c8>

但這還不夠動態,因為你仍然需要自己編寫整個類的代碼。由于類也是對象,所以它們必須是通過什么東西來生成的才對。

當你使用class關鍵字時,Python解釋器自動創建這個對象。但就和Python中的大多數事情一樣,Python仍然提供給你手動處理的方法。

三、使用 type 創建類

type 還有一種完全不同的功能,動態的創建類。

type可以接受一個類的描述作為參數,然后返回一個類。(要知道,根據傳入參數的不同,同一個函數擁有兩種完全不同的用法是一件很傻的事情,但這在Python中是為了保持向后兼容性)

type 可以像這樣工作:

type(類名, 由父類名稱組成的元組(針對繼承的情況,可以為空),包含屬性的字典(名稱和值))

比如下面的代碼:

In [63]: class Test:
    ...:     pass
    ...:

In [64]: Test()
Out[64]: __main__.Test at 0x21258b34048>

In [65]:

可以手動像這樣創建:

In [69]:# 使用type定義類

In [69]: Test2 = type('Test2', (), {})

In [70]: Test2()
Out[70]: __main__.Test2 at 0x21259665808>

我們使用 Test2 作為類名,并且也可以把它當做一個變量來作為類的引用。類和變量是不同的,這里沒有任何理由把事情弄的復雜。即 type函數 中第1個實參,也可以叫做其他的名字,這個名字表示類的名字

In [71]: UserCls = type('User', (), {})

In [72]: print(UserCls)
class '__main__.User'>

In [73]:

使用 help 來測試這2個類

In [74]: # 用 help 查看 Test類

In [75]: help(Test)
Help on class Test in module __main__:

class Test(builtins.object)
 |  Data descriptors defined here:
 |
 |  __dict__
 |      dictionary for instance variables (if defined)
 |
 |  __weakref__
 |      list of weak references to the object (if defined)


In [76]: # 用 help 查看 Test2類

In [77]: help(Test2)
Help on class Test2 in module __main__:

class Test2(builtins.object)
 |  Data descriptors defined here:
 |
 |  __dict__
 |      dictionary for instance variables (if defined)
 |
 |  __weakref__
 |      list of weak references to the object (if defined)


In [78]:

四、使用type創建帶有屬性的類

type 接受一個字典來為類定義屬性,因此

Parent = type('Parent', (), {'name': 'hui'})

可以翻譯為:

class Parent(object):
	name = 'hui'

并且可以將 Parent 當成一個普通的類一樣使用:

In [79]: Parent = type('Parent', (), {'name': 'hui'})

In [80]: print(Parent)
class '__main__.Parent'>

In [81]: Parent.name
Out[81]: 'hui'

In [82]: p = Parent()

In [83]: p.name
Out[83]: 'hui'

當然,你可以繼承這個類,代碼如下:

class Child1(Parent):
    name = 'jack'
    sex =  '男'
    
class Child2(Parent):
    name = 'mary'
    sex = '女'

就可以寫成:

Child1 = type('Child1', (Parent, ), {'name': 'jack', 'sex': '男'})

In [85]: Child2 = type('Child2', (Parent, ), {'name': 'mary', 'sex': '女'})

In [87]: Child1.name, Child1.sex
Out[87]: ('jack', '男')

In [88]: Child2.name, Child2.sex
Out[88]: ('mary', '女')

注意:

  • type 的第2個參數,元組中是父類的名字,而不是字符串
  • 添加的屬性是 類屬性,并不是實例屬性

五、使用type創建帶有方法的類

最終你會希望為你的類增加方法。只需要定義一個有著恰當簽名的函數并將其作為屬性賦值就可以了。

添加實例方法

Child1 = type('Child1', (Parent, ), {'name': 'jack', 'sex': '男'})

In [85]: Child2 = type('Child2', (Parent, ), {'name': 'mary', 'sex': '女'})

In [87]: Child1.name, Child1.sex
Out[87]: ('jack', '男')

In [88]: Child2.name, Child2.sex
Out[88]: ('mary', '女')

添加靜態方法

In [96]: Parent = type('Parent', (), {'name': 'hui'})

In [97]: # 定義靜態方法
    
In [98]: @staticmethod
    ...: def test_static():
    ...:     print('static method called...')
    ...:

In [100]: Child4 = type('Child4', (Parent, ), {'name': 'zhangsan', 'test_static': test_static})

In [101]: c4 = Child4()

In [102]: c4.test_static()
static method called...

In [103]: Child4.test_static()
static method called...

添加類方法

In [105]: Parent = type('Parent', (), {'name': 'hui'})

In [106]: # 定義類方法

In [107]: @classmethod
     ...: def test_class(cls):
     ...:     print(cls.name)
     ...:

In [108]: Child5 = type('Child5', (Parent, ), {'name': 'lisi', 'test_class': test_class})

In [109]: c5 = Child5()

In [110]: c5.test_class()
lisi

In [111]: Child5.test_class()
lisi

你可以看到,在Python中,類也是對象,你可以動態的創建類。這就是當你使用關鍵字 classPython 在幕后做的事情,就是通過元類來實現的

較為完整的使用 type 創建類的方式:

class Animal(object):
    
    def eat(self):
        print('吃東西')


def dog_eat(self):
    print('喜歡吃骨頭')

def cat_eat(self):
    print('喜歡吃魚')


Dog = type('Dog', (Animal, ), {'tyep': '哺乳類', 'eat': dog_eat})

Cat = type('Cat', (Animal, ), {'tyep': '哺乳類', 'eat': cat_eat})

# ipython 測驗
In [125]: animal = Animal()

In [126]: dog = Dog()

In [127]: cat = Cat()

In [128]: animal.eat()
吃東西

In [129]: dog.eat()
喜歡吃骨頭

In [130]: cat.eat()
喜歡吃魚

六、到底什么是元類(終于到主題了)

元類就是用來創建類的【東西】。你創建類就是為了創建類的實例對象,不是嗎?但是我們已經學習到了Python中的類也是對象。

元類就是用來創建這些類(對象)的,元類就是類的類,你可以這樣理解為:

MyClass = MetaClass() # 使用元類創建出一個對象,這個對象稱為“類”
my_object = MyClass() # 使用“類”來創建出實例對象

你已經看到了type可以讓你像這樣做:

MyClass = type('MyClass', (), {})

這是因為函數 type 實際上是一個元類。type 就是 Python在背后用來創建所有類的元類。現在你想知道那為什么 type 會全部采用小寫形式而不是 Type 呢?好吧,我猜這是為了和 str 保持一致性,str是用來創建字符串對象的類,而 int 是用來創建整數對象的類。type 就是創建類對象的類。你可以通過檢查 __class__ 屬性來看到這一點。因此 Python中萬物皆對象

現在,對于任何一個 __class____class__ 屬性又是什么呢?

In [136]: a = 10

In [137]: b = 'acb'

In [138]: li = [1, 2, 3]

In [139]: a.__class__.__class__
Out[139]: type

In [140]: b.__class__.__class__
Out[140]: type

In [141]: li.__class__.__class__
Out[141]: type

In [142]: li.__class__.__class__.__class__
Out[142]: type

因此,元類就是創建類這種對象的東西。type 就是 Python的內建元類,當然了,你也可以創建自己的元類。

七、metaclass屬性

你可以在定義一個類的時候為其添加 __metaclass__ 屬性。

class Foo(object):
    __metaclass__ = something…
    ...省略...

如果你這么做了,Python就會用元類來創建類Foo。小心點,這里面有些技巧。你首先寫下 class Foo(object),但是類Foo還沒有在內存中創建。Python會在類的定義中尋找 __metaclass__ 屬性,如果找到了,Python就會用它來創建類Foo,如果沒有找到,就會用內建的 type 來創建這個類。

class Foo(Bar):
    pass

Python做了如下的操作:

1.Foo中有 __metaclass__ 這個屬性嗎?如果有,Python會通過 __metaclass__ 創建一個名字為Foo的類(對象)

2.如果Python沒有找到 __metaclass__,它會繼續在 Bar(父類) 中尋找 __metaclass__ 屬性,并嘗試做和前面同樣的操作。

3.如果Python在任何父類中都找不到 __metaclass__,它就會在模塊層次中去尋找 __metaclass__,并嘗試做同樣的操作。

4.如果還是找不到 __metaclass__ ,Python就會用內置的 type 來創建這個類對象。

現在的問題就是,你可以在 __metaclass__ 中放置些什么代碼呢?

答案就是:可以創建一個類的東西。那么什么可以用來創建一個類呢?type,或者任何使用到type或者子類化的type都可以。

八、自定義元類

元類的主要目的就是為了當創建類時能夠自動地改變類。

假想一個很傻的例子,你決定在你的模塊里所有的類的屬性都應該是大寫形式。有好幾種方法可以辦到,但其中一種就是通過在模塊級別設定 __metaclass__。采用這種方法,這個模塊中的所有類都會通過這個元類來創建,我們只需要告訴元類把所有的屬性都改成大寫形式就萬事大吉了。

幸運的是,__metaclass__ 實際上可以被任意調用,它并不需要是一個正式的類。所以,我們這里就先以一個簡單的函數作為例子開始。

python2中

# -*- 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 # 設置Foo類的元類為upper_attr
    bar = 'bip'

print(hasattr(Foo, 'bar'))
# Flase
print(hasattr(Foo, 'BAR'))
# True

f = Foo()
print(f.BAR)

python3中

# -*- coding:utf-8 -*-
def upper_attr(class_name, class_parents, 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)

# 再類的繼承()中使用metaclass
class Foo(object, metaclass=upper_attr):
    bar = 'bip'

print(hasattr(Foo, 'bar'))
# Flase
print(hasattr(Foo, 'BAR'))
# True

f = Foo()
print(f.BAR)

再做一次,這一次用一個真正的 class 來當做元類。

class UpperAttrMetaClass(type):
    
    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'))
# 輸出: False
print(hasattr(Foo, 'BAR'))
# 輸出: True

f = Foo()
print(f.BAR)
# 輸出: 'bip'

__new__ 是在__init__之前被調用的特殊方法
__new__是用來創建對象并返回之的方法
而__init__只是用來將傳入的參數初始化給對象
這里,創建的對象是類,我們希望能夠自定義它,所以我們這里改寫__new__

就是這樣,除此之外,關于元類真的沒有別的可說的了。但就元類本身而言,它們其實是很簡單的:

1.攔截類的創建

2.修改類

3.返回修改之后的類

總結

現在回到我們的大主題上來,究竟是為什么你會去使用這樣一種容易出錯且晦澀的特性?

好吧,一般來說,你根本就用不上它:

“元類就是深度的魔法,99%的用戶應該根本不必為此操心。如果你想搞清楚究竟是否需要用到元類,那么你就不需要它。那些實際用到元類的人都非常清楚地知道他們需要做什么,而且根本不需要解釋為什么要用元類。” —— Python界的領袖 Tim Peters

到此這篇關于Python進階學習之帶你探尋Python類的鼻祖-元類的文章就介紹到這了,更多相關Python元類內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Python中的Nonetype類型怎么判斷
  • python數據類型相關知識擴展
  • 一篇文章帶你搞懂Python類的相關知識
  • 用 Python 元類的特性實現 ORM 框架
  • 詳細總結Python類的多繼承知識
  • python 使用Tensorflow訓練BP神經網絡實現鳶尾花分類
  • Python-typing: 類型標注與支持 Any類型詳解
  • python中必會的四大高級數據類型(字符,元組,列表,字典)
  • Python如何把不同類型數據的json序列化
  • Python基礎之元類詳解
  • Python入門學習之類的相關知識總結

標簽:四川 惠州 黑龍江 黔西 常德 鷹潭 益陽 上海

巨人網絡通訊聲明:本文標題《Python進階學習之帶你探尋Python類的鼻祖-元類》,本文關鍵詞  Python,進階,學,習之,帶你,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Python進階學習之帶你探尋Python類的鼻祖-元類》相關的同類信息!
  • 本頁收集關于Python進階學習之帶你探尋Python類的鼻祖-元類的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    91麻豆精品国产无毒不卡在线观看| 豆国产96在线|亚洲| 国产v综合v亚洲欧| 色综合欧美在线视频区| 日韩三级视频在线观看| 日本vs亚洲vs韩国一区三区二区 | 91精品在线免费| 中文字幕字幕中文在线中不卡视频| 亚洲国产va精品久久久不卡综合| 成人av在线播放网址| 国产日韩欧美亚洲| 秋霞午夜av一区二区三区| 色欧美日韩亚洲| 一区二区三区国产精华| 欧美在线短视频| 亚洲福利视频一区二区| 国产精品一区专区| 欧美精品一区男女天堂| 国产精品99久久久久久久女警| 欧美老年两性高潮| 午夜精品福利一区二区三区蜜桃| 色婷婷综合久久久久中文一区二区| 中文字幕乱码日本亚洲一区二区 | 亚洲国产aⅴ成人精品无吗| 91精品在线麻豆| 国产成人夜色高潮福利影视| 亚洲欧美偷拍另类a∨色屁股| 欧美亚洲国产怡红院影院| 精品写真视频在线观看| 视频精品一区二区| 国产精品不卡在线| 欧美一区二区高清| 欧美日韩精品是欧美日韩精品| 狠狠色丁香婷综合久久| 亚洲综合免费观看高清完整版在线| 精品国产伦一区二区三区观看体验 | 精品国产1区二区| 国产美女av一区二区三区| 激情文学综合网| 久久久久成人黄色影片| 91精品欧美一区二区三区综合在 | 欧美三级蜜桃2在线观看| 天天综合网 天天综合色| 亚洲一区二区三区在线播放| 丝瓜av网站精品一区二区| 天天操天天干天天综合网| 国产日韩欧美电影| 欧美一区午夜视频在线观看| 天天综合网天天综合色| 日韩精品中文字幕一区| 一区免费观看视频| 国产精品久久久久久久久搜平片| 欧美日韩久久久久久| 日韩一区二区三区av| 一区二区三区欧美日韩| 五月开心婷婷久久| 亚洲伦理在线免费看| 青青草97国产精品免费观看 | 成人永久aaa| 91女厕偷拍女厕偷拍高清| 一区二区三区四区蜜桃| 国产日韩欧美精品电影三级在线 | 欧美一区二区三区小说| 国产欧美日韩另类一区| 日韩一二三区不卡| 欧美日韩一区 二区 三区 久久精品| 日韩视频免费观看高清在线视频| 欧美一级夜夜爽| 亚洲精品va在线观看| 青青草成人在线观看| 在线播放中文一区| 欧美日韩久久久| 欧美一级片在线观看| 欧美激情在线看| 国产一区中文字幕| 色综合一区二区| 国产精品国产自产拍高清av| 免费人成网站在线观看欧美高清| 久久99精品久久久久久国产越南 | 亚洲婷婷综合色高清在线| 在线观看亚洲成人| 99re视频精品| 国产精品视频你懂的| 欧美写真视频网站| 精品国产乱码久久久久久牛牛| 成人午夜伦理影院| 成人av在线播放网站| 欧美性大战久久久久久久 | 成人sese在线| 国产精品99久久久久久久女警| 老司机午夜精品| 日本在线播放一区二区三区| 亚欧色一区w666天堂| 亚洲伊人色欲综合网| 亚洲v中文字幕| 五月婷婷色综合| 精品国产第一区二区三区观看体验 | 喷白浆一区二区| 久久99国内精品| 大陆成人av片| 岛国精品在线观看| 中文字幕av不卡| 亚洲成人一区在线| 麻豆精品国产91久久久久久 | 国产精品国产三级国产有无不卡| 亚洲色图视频网| 久久精品99久久久| 日本韩国精品在线| 韩国午夜理伦三级不卡影院| 国产一区二区主播在线| 国产成人小视频| 欧美午夜电影在线播放| 欧美性videosxxxxx| 欧美xfplay| 日韩精品五月天| 日韩欧美国产麻豆| 精品一区二区久久| 欧美日韩免费一区二区三区| 337p粉嫩大胆噜噜噜噜噜91av| 欧美美女bb生活片| 日韩一区有码在线| 麻豆精品在线播放| 中文字幕乱码日本亚洲一区二区| 亚洲精品国产无天堂网2021| 国产乱码字幕精品高清av| 欧美激情资源网| 岛国av在线一区| 一区二区三区自拍| 在线免费观看日韩欧美| 亚洲国产日产av| 日一区二区三区| 成人免费毛片aaaaa**| 亚洲国产精品久久人人爱蜜臀| 精品午夜久久福利影院| 久久亚洲一区二区三区四区| 免费人成黄页网站在线一区二区 | 黄色精品一二区| 精品国产乱码久久久久久久久| 亚洲综合一区二区精品导航| 欧美电影精品一区二区| 91免费在线视频观看| 蜜桃传媒麻豆第一区在线观看| 欧美午夜精品久久久久久超碰| 亚洲欧美在线观看| 91福利在线播放| 日本亚洲天堂网| 成人99免费视频| 麻豆91在线播放免费| 国产精品传媒在线| 久久婷婷色综合| 欧美网站一区二区| 91黄色激情网站| 成人永久免费视频| 久久成人18免费观看| 天天综合色天天| 日精品一区二区三区| 亚洲主播在线观看| 成人欧美一区二区三区视频网页 | 欧美午夜精品理论片a级按摩| 欧美国产激情一区二区三区蜜月 | 亚洲人成精品久久久久| 欧美一区永久视频免费观看| 日本美女视频一区二区| 在线欧美日韩国产| 一本色道久久综合亚洲aⅴ蜜桃 | 国产综合久久久久久久久久久久| 亚洲人成亚洲人成在线观看图片| 欧美tickling网站挠脚心| 精品国产一区二区三区久久影院| 欧美日韩午夜精品| 欧美日韩的一区二区| 久久精品日韩一区二区三区| 精品久久久久久久久久久久久久久 | 香蕉久久一区二区不卡无毒影院 | 久久精品一区二区| 亚洲人成7777| 亚洲欧美日韩中文字幕一区二区三区| 色偷偷久久人人79超碰人人澡| 91丨porny丨蝌蚪视频| 7777精品伊人久久久大香线蕉| 在线观看91视频| www国产精品av| 亚洲欧美电影一区二区| 激情都市一区二区| 欧美中文字幕不卡| 在线观看av不卡| 亚洲午夜日本在线观看| 国产999精品久久久久久绿帽| av中文一区二区三区| 91蜜桃视频在线| 国产精品久久久久影院亚瑟| 一区二区欧美视频| 日韩中文字幕一区二区三区| 国产乱人伦精品一区二区在线观看| 久久精品国产亚洲a| 欧美午夜电影网| 天堂影院一区二区| 91农村精品一区二区在线| 久久午夜国产精品| 亚洲小说春色综合另类电影|