国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

Python進(jìn)階——如何正確使用魔法方法?(上)

共 17283字,需瀏覽 35分鐘

 ·

2021-03-04 00:06

閱讀本文大約需要 10 分鐘。

在做 Python 開發(fā)時(shí),我們經(jīng)常會(huì)遇到以雙下劃線開頭和結(jié)尾的方法,例如 __init__、__new__、__getattr__、__setitem__ 等等,這些方法我們通常稱之為「魔法方法」,而使用這些「魔法方法」,我們可以非常方便地給類添加特殊的功能。

這篇文章,我們就來分析一下,Python 中的魔法方法都有哪些?使用這些魔法方法,我們可以實(shí)現(xiàn)哪些實(shí)用的功能?

魔法方法概覽

首先,我們先對(duì) Python 中的魔法方法進(jìn)行歸類,常見的魔法方法大致可分為以下幾類:

  • 構(gòu)造與初始化
  • 類的表示
  • 訪問控制
  • 比較操作
  • 容器類操作
  • 可調(diào)用對(duì)象
  • 序列化

由于魔法方法分類較多,這篇文章我們先來看前幾個(gè):構(gòu)造與初始化、類的表示、訪問控制。剩下的魔法方法,我們會(huì)在下一篇文章進(jìn)行分析講解。

構(gòu)造與初始化

首先,我們來看關(guān)于構(gòu)造與初始化相關(guān)的魔法方法,主要包括以下幾種:

  • __init__
  • __new__
  • __del__

__init__

關(guān)于構(gòu)造與初始化的魔法方法,我們使用最頻繁的一個(gè)就是 __init__ 了。

我們?cè)诙x類的時(shí)候,通常都會(huì)去定義構(gòu)造方法,它的作用就是在初始化一個(gè)對(duì)象時(shí),定義這個(gè)對(duì)象的初始值。

# coding: utf8

class Person(object):

    def __init__(self, name, age):
        self.name = name
        self.age = age

p1 = Person('張三'25)
p2 = Person('李四'30)

__new__

在初始化一個(gè)類的屬性時(shí),除了使用 __init__ 之外,還可以使用 __new__ 這個(gè)方法。

我們?cè)谄綍r(shí)開發(fā)中使用的雖然不多,但是經(jīng)常能夠在開源框架中看到它的身影。實(shí)際上,這才是「真正的構(gòu)造方法」。

# coding: utf8

class Person(object):

    def __new__(cls, *args, **kwargs):
        print "call __new__"
        return object.__new__(cls, *args, **kwargs)

    def __init__(self, name, age):
        print "call __init__"
        self.name = name
        self.age = age

p = Person("張三"20)

# Output:
# call __new__
# call __init__

從例子我們可以看到,__new__ 會(huì)在對(duì)象實(shí)例化時(shí)第一個(gè)被調(diào)用,然后才會(huì)調(diào)用 __init__,它們的區(qū)別如下:

  • __new__ 的第一個(gè)參數(shù)是 cls,而 __init__ 的第一個(gè)參數(shù)是 self
  • __new__ 返回值是一個(gè)實(shí)例對(duì)象,而 __init__ 沒有任何返回值,只做初始化操作
  • __new__ 由于返回的是一個(gè)實(shí)例對(duì)象,所以它可以給所有實(shí)例進(jìn)行統(tǒng)一的初始化操作

了解了它們之間的區(qū)別,我們來看 __new__ 在什么場景下使用?

由于 __new__ 優(yōu)先于 __init__ 調(diào)用,而且它返回的是一個(gè)實(shí)例,所以我們可以利用這個(gè)特性,在 __new__ 方法中,每次返回同一個(gè)實(shí)例來實(shí)現(xiàn)一個(gè)單例類:

# coding: utf8

class Singleton(object):
    """單例"""
    _instance = None
    def __new__(cls, *args, **kwargs):
        if not cls._instance:
            cls._instance = super(Singleton, cls).__new__(cls, *args, **kwargs)
        return cls._instance

class MySingleton(Singleton):
    pass

a = MySingleton()
b = MySingleton()

assert a is b # True

另外一個(gè)使用場景是,當(dāng)我們需要繼承內(nèi)置類時(shí),例如想要繼承 intstr、tuple,就無法使用 __init__ 來初始化了,只能通過 __new__ 來初始化數(shù)據(jù):

# coding: utf8

class g(float):
    """千克轉(zhuǎn)克"""
    def __new__(cls, kg):
        return float.__new__(cls, kg * 2)

a = g(50# 50千克轉(zhuǎn)為克
print a   # 100
print a + 100 # 200 由于繼承了float,所以可以直接運(yùn)算,非常方便!

在這個(gè)例子中,我們實(shí)現(xiàn)了一個(gè)類,這個(gè)類繼承了 float,之后,我們就可以對(duì)這個(gè)類的實(shí)例進(jìn)行計(jì)算了,是不是很神奇?

除此之外,__new__ 比較多的應(yīng)用場景是配合「元類」使用,關(guān)于「元類」的原理,我會(huì)在后面的文章中講到。

__del__

__del__ 這個(gè)方法就是我們經(jīng)常說的「析構(gòu)方法」,也就是在對(duì)象被垃圾回收時(shí)被調(diào)用。

但是請(qǐng)注意,當(dāng)我們執(zhí)行 del obj 時(shí),這個(gè)方法不一定會(huì)執(zhí)行。

由于 Python 是通過引用計(jì)數(shù)來進(jìn)行垃圾回收的,如果這個(gè)實(shí)例在執(zhí)行 del 時(shí),還被其他對(duì)象引用,那么就不會(huì)觸發(fā)執(zhí)行 __del__ 方法。

我們來看一個(gè)例子:

class Person(object):
    def __del__(self):
        print '__del__'

我們定義了一個(gè)帶有 __del__ 方法的類,此時(shí)我們直接執(zhí)行:

a = Person()
print 'exit'

# Output:
# exit
# __del__

由于我們沒有對(duì)實(shí)例進(jìn)行任何引用操作時(shí),所以 __del__ 在程序退出時(shí)被調(diào)用。

如果我們顯示執(zhí)行 del obj,如下:

a = Person()
del a    # 手動(dòng)銷毀對(duì)象
print 'exit'

# Output:
# __del__
# exit

同樣地,由于實(shí)例沒有被其他對(duì)象所引用,當(dāng)我們手動(dòng)銷毀這個(gè)實(shí)例時(shí),__del__ 被調(diào)用后程序正常退出。

如果這個(gè)對(duì)象被其他對(duì)象所引用:

a = Person()
b = a   # b引用a
del a   # 手動(dòng)銷毀 不觸發(fā)__del__
print 'exit'

# Output:
# exit
# __del__

可以看到,如果這個(gè)實(shí)例有被其他對(duì)象引用,盡管我們手動(dòng)銷毀這個(gè)實(shí)例,但不會(huì)觸發(fā) __del__ 方法,而是在程序正常退出時(shí)被調(diào)用執(zhí)行。

通常來說,__del__ 這個(gè)方法我們很少會(huì)使用到,除非需要在顯示執(zhí)行 del 執(zhí)行特殊清理邏輯的場景中才會(huì)使用到。

但另一方面,也給我們一個(gè)提醒,當(dāng)我們?cè)趯?duì)文件、Socket 進(jìn)行操作時(shí),如果要想安全地關(guān)閉和銷毀這些對(duì)象,最好是在 try 異常塊后的 finally 中進(jìn)行關(guān)閉和釋放操作,從而避免資源的泄露。

類的表示

接下來,我們來看關(guān)于類的表示相關(guān)的魔法方法,主要包括以下幾種:

  • __str__ / __repr__
  • __unicode__
  • __hash__ / __eq__
  • __nozero__

__str__/__repr__

關(guān)于 __str__ 和 __repr__ 這 2 個(gè)魔法方法,非常類似,很多人區(qū)分不出它們有什么不同,我們來看幾個(gè)例子,就能理解這 2 個(gè)方法的效果:

>>> a = 'hello'
>>> str(a)
'hello'
>>> '%s' % a # 調(diào)用__str__
'hello'

>>> repr(a)  # 對(duì)象a的標(biāo)準(zhǔn)表示 也就是a是如何創(chuàng)建的
"'hello'"
>>> '%r' % a # 調(diào)用__repr__
"'hello'"

>>> import datetime
>>> b = datetime.datetime.now()
>>> str(b)
'2017-02-22 12:28:40.923379'
>>> print b  # 等同于print str(b)
2017-02-22 12:28:40.923379

>>> repr(b)  # 展示對(duì)象b的標(biāo)準(zhǔn)創(chuàng)建方式(如何創(chuàng)建的)
'datetime.datetime(2017, 2, 22, 12, 28, 40, 923379)'
>>> b       # 等同于print repr(b)
datetime.datetime(2017222122840923379)

>>> c = eval(repr(b)) # repr(b)目標(biāo)針對(duì)于機(jī)器 所以可執(zhí)行
>>> c
datetime.datetime(2017222122840923379)

從上述例子中我們可以看出這 2 個(gè)方法的區(qū)別:

  • __str__ 強(qiáng)調(diào)可讀性,而 __repr__ 強(qiáng)調(diào)準(zhǔn)確性 / 標(biāo)準(zhǔn)性
  • __str__ 的目標(biāo)人群是用戶,而 __repr__ 的目標(biāo)人群是機(jī)器,__repr__ 返回的結(jié)果是可執(zhí)行的,通過 eval(repr(obj)) 可以正確運(yùn)行
  • 占位符 %s 調(diào)用的是 __str__,而 %r 調(diào)用的是 __repr__ 方法

所以,我們?cè)趯?shí)際中開發(fā)中定義類時(shí),一般這樣使用:

# coding: utf8

class Person(object):

    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __str__(self):
        # 格式化 友好對(duì)用戶展示
        return 'name: %s, age: %s' % (self.name, self.age)

    def __repr__(self):
        # 標(biāo)準(zhǔn)化展示
        return "Person('%s', %s)" % (self.name, self.age)

person = Person('zhangsan'20)

# 強(qiáng)調(diào)對(duì)用戶友好
print str(person)       # name: zhangsan, age: 20 
print '%s' % person     # name: zhangsan, age: 20

# 強(qiáng)調(diào)對(duì)機(jī)器友好 結(jié)果 eval 可執(zhí)行
print repr(person)  # Person('zhangsan', 20)
print '%r' % person     # Person('zhangsan', 20)

明白了它們之間的區(qū)別,我們?cè)偎伎家幌?,如果只定義了 __str__ 或 __repr__ 其中一個(gè),那會(huì)是什么結(jié)果?

只定義 __str__,但沒有定義 __repr__

# coding: utf8

class Person(object):

    def __init__(self, name, age):
        self.name = name
        self.age = age
        
    def __str__(self):
        return 'name: %s, age: %s' % (self.name, self.age)

person = Person('zhangsan'20)

print str(person)       # name: zhangsan, age: 20 
print '%s' % person     # name: zhangsan, age: 20

print repr(person)  # <__main__.Person object at 0x10bee9390>
print '%r' % person     # <__main__.Person object at 0x10bee9390>

只定義 __repr__,但沒有定義 __str__

# coding: utf8

class Person(object):

    def __init__(self, name, age):
        self.name = name
        self.age = age
        
    def __repr__(self):
        return "Person('%s', %s)" % (self.name, self.age)

person = Person('zhangsan'20)

print str(person)       # Person('zhangsan', 20)
print '%s' % person     # Person('zhangsan', 20)

print repr(person)  # Person('zhangsan', 20)
print '%r' % person     # Person('zhangsan', 20)

從例子中我們可以看到結(jié)果:

  • 如果只定義了 _str__,那么 repr(person) 輸出 <__main__.Person object at 0x10bee9390>
  • 如果只定義了 __repr__,那么 str(person) 與 repr(person) 結(jié)果是相同的

也就是說,__repr__ 在表示類時(shí),是一級(jí)的,如果只定義它,那么 __str__ = __repr__。

而 __str__ 展示類時(shí)是次級(jí)的,如果沒有定義 __repr__,那么 repr(person) 將會(huì)展示缺省的定義。

__unicode__

如果一個(gè)類定義了 __unicode__ 方法,那么在調(diào)用 unicode(obj) 時(shí),此方法將被調(diào)用,但是其返回值類型是 unicode。

# coding: utf8

class Person(object):

    def __unicode__(self):
        # 這里不是u'hello'
        return 'hello'
    
person = Person()
print unicode(person)           # helllo
print type(unicode(person))     # <type 'unicode'>

從例子中我們可以看到, 雖然我們定義的 __unicode__ 返回值不是 unicode 類型,但在輸出時(shí),程序會(huì)自動(dòng)轉(zhuǎn)換成 unicode 類型。

這個(gè)方法在開發(fā)中一般很少使用,通常我們只需要定義 __str__ 即可。

__hash__/__eq__

__hash__ 方法返回一個(gè)整數(shù),用來表示實(shí)例對(duì)象的唯一標(biāo)識(shí),配合 __eq__ 方法,可以判斷兩個(gè)對(duì)象是否相等:

# coding: utf8

class Person(object):
    def __init__(self, uid):
        self.uid = uid
        
 def __repr__(self):
        return 'Person(%s)' % self.uid
        
    def __hash__(self):
        return self.uid
    
    def __eq__(self, other):
        return self.uid == other.uid
    
p1 = Person(1)
p2 = Person(1)
p1 == p2    # True

p3 = Person(2)
print set([p1, p2, p3]) # 根據(jù)唯一標(biāo)識(shí)去重輸出 set([Person(1), Person(2)])

如果我們需要判斷兩個(gè)對(duì)象是否相等,只需要我們重寫 __hash__ 和 __eq__ 方法就可以了。

此外,當(dāng)我們使用 set 時(shí),在 set 中存放這些對(duì)象,也會(huì)根據(jù)這兩個(gè)方法進(jìn)行去重操作。

__nonzero__

當(dāng)調(diào)用 bool(obj) 時(shí),會(huì)調(diào)用 __nonzero__ 方法,返回 True 或 False

# coding: utf8

class Person(object):
    def __init__(self, uid):
        self.uid = uid

    def __nonzero__(self):
        return self.uid > 10
    
p1 = Person(1)
p2 = Person(15)
print bool(p1)  # False
print bool(p2)  # True

在 Python3 中,__nonzero__ 被重命名為 __bool__。

訪問控制

接下來,我們來看關(guān)于訪問控制的魔法方法,主要包括以下幾種:

  • __setattr__:通過「.」設(shè)置屬性或 setattr(key, value) 設(shè)置屬性時(shí)調(diào)用
  • __getattr__:訪問不存在的屬性時(shí)調(diào)用
  • __delattr__:刪除某個(gè)屬性時(shí)調(diào)用
  • __getattribute__:訪問任意屬性或方法時(shí)調(diào)用

我們來看使用這些方法的完整例子:

# coding: utf8

class Person(object):

    def __setattr__(self, key, value):
        """屬性賦值"""
        if key not in ('name''age'):
            return
        if key == 'age' and value < 0:
            raise ValueError()
        super(Person, self).__setattr__(key, value)

    def __getattr__(self, key):
        """訪問某個(gè)不存在的屬性"""
        return 'unknown'

    def __delattr__(self, key):
        """刪除某個(gè)屬性"""
        if key == 'name':
            raise AttributeError()
        super(Person, self).__delattr__(key)

    def __getattribute__(self, key):
        """所有屬性/方法調(diào)用都經(jīng)過這里"""
        if key == 'money':
            return 100
        if key == 'hello':
            return self.say
        return super(Person, self).__getattribute__(key)

    def say(self):
        return 'hello'
    
p1 = Person()
p1.name = 'zhangsan' # 調(diào)用__setattr__
p1.age = 20          # 調(diào)用__setattr__
print p1.name        # zhangsan
print p1.age        # 20

setattr(p1, 'name''lisi'# 調(diào)用__setattr__
setattr(p1, 'age'30)   # 調(diào)用__setattr__
print p1.name              # lisi
print p1.age              # 30

p1.gender = 'male'  # __setattr__中忽略對(duì)gender賦值
print p1.gender     # gender不存在 所以會(huì)調(diào)用__getattr__返回unknown

print p1.money      # money不存在 在__getattribute__中返回100

print p1.say()      # hello
print p1.hello()    # hello 調(diào)用__getattribute__ 間接調(diào)用say方法

del p1.name      # __delattr__中引發(fā)AttributeError

p2 = Person()
p2.age = -1      # __setattr__中引發(fā)ValueError

我們仔細(xì)看一下這個(gè)例子,我已經(jīng)添加好了詳細(xì)的注釋。

__setattr__

先來說 __setattr__,當(dāng)我們?cè)诮o一個(gè)對(duì)象進(jìn)行屬性賦值時(shí),都會(huì)經(jīng)過這個(gè)方法,在這個(gè)例子中,我們只允許對(duì) name 和 age 這 2 個(gè)屬性進(jìn)行賦值,忽略了 gender 屬性,除此之外,我們還對(duì) age 賦值進(jìn)行了校驗(yàn)。

通過 __setattr__ 方法,我們可以非常方便地對(duì)屬性賦值進(jìn)行控制。

__getattr__

再來看 __getattr__,由于我們?cè)?nbsp;__setattr__ 中忽略了對(duì) gender 屬性的賦值,所以當(dāng)訪問這個(gè)不存在的屬性時(shí),會(huì)調(diào)用 __getattr__ 方法,在這個(gè)方法中返回了默認(rèn)值 unknown。

很多同學(xué)以為這個(gè)方法與 __setattr__ 方法對(duì)等的,一個(gè)是賦值,一個(gè)是獲取。其實(shí)不然,__getattr__ 只有在訪問「不存在的屬性」時(shí)才會(huì)被調(diào)用,這里我們需要注意。

__getattribute__

了解了 __getattr__ 后,還有一個(gè)和它非常類似的方法:__getattribute__。

很多人經(jīng)常把這個(gè)方法和 __getattr__ 混淆,通過例子我們可以看出,它與前者的區(qū)別在于:

  • __getattr__ 只有在訪問不存在的屬性時(shí)被調(diào)用,而 __getattribute__ 在訪問任意屬性時(shí)都會(huì)被調(diào)用
  • __getattr__ 只針對(duì)屬性訪問,而__getattribute__ 不僅針對(duì)所有屬性訪問,還包括方法調(diào)用

在上面的例子,雖然我們沒有定義 money 屬性和 hello 方法,但是在 __getattribute__ 里攔截到了這個(gè)屬性和方法,就可以對(duì)其執(zhí)行不同的邏輯。

__delattr__

最后,我們來看 __delattr__,它比較簡單,當(dāng)刪除對(duì)象的某個(gè)屬性時(shí),這個(gè)方法會(huì)被調(diào)用,所以它一般會(huì)用在刪除屬性前的校驗(yàn)場景中使用。

總結(jié)

這篇文章,我們主要介紹了 Python 中常見的魔法方法,主要有構(gòu)造與初始化、類的表示、訪問控制這 3 個(gè)模塊。

構(gòu)造與初始化的魔法方法,常常用在類的初始化過程中,其中 __init__一般用于實(shí)例初始化, 而 __new__ 可以改變初始化實(shí)例的行為,通過它我們可以實(shí)現(xiàn)一個(gè)單例或者繼承一個(gè)內(nèi)置類。

關(guān)于類的表示的魔法方法,比較常用的,當(dāng)我們想表示一個(gè)類時(shí),可以使用 __str__ 或 __repr__ 方法,當(dāng)需要判斷兩個(gè)對(duì)象是否相等時(shí),可以使用 __hash__ 和 __eq__ 方法。

關(guān)于訪問控制的魔法方法,它可以控制實(shí)例的屬性賦值、屬性訪問、方法訪問、屬性刪除等操作,這對(duì)于我們實(shí)現(xiàn)一個(gè)復(fù)雜功能的類有很大幫助。

在下一篇文章,我們會(huì)繼續(xù)分析剩下的魔法方法,主要包括關(guān)于比較操作、容器類操作、可調(diào)用對(duì)象、序列化相關(guān)的魔法方法。


更多閱讀



2020 年最佳流行 Python 庫 Top 10


2020 Python中文社區(qū)熱門文章 Top 10


5分鐘快速掌握 Python 定時(shí)任務(wù)框架

特別推薦





點(diǎn)擊下方閱讀原文加入社區(qū)會(huì)員

瀏覽 38
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)
評(píng)論
圖片
表情
推薦
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 午夜第一页| 爱爱毛片| 无码精品一区| 九九r在线精品观看视频| 3DAV一区二区三区动漫| 成年人视频网| 91涩| 奇米色网| 精品偷拍视频| 亚洲无码1| 亚洲天堂视频在线播放| 人人妻人人爽人人操| 1024国产在线| 国精产品一区二区三区在线观看| 精品无码一区二区三区在线| 亚洲特级毛片| 西西444www无码精品| 俺来也俺去也| 久久精品视频播放| 亚洲无码婷婷| 欧美日一区二区三区| 91青青草| 中韩日美免费看的电影| 免费AA片| 日本成人激情视频| 婷婷亚洲五月色综合| 国产精品视频无码| 免费一级无码婬片A片APP直播| 精品福利在线观看| 蜜桃视频成人版网站| 亚洲永久免费精品| 一道本一区二区| 激情视频网址| 欧美操逼操| 一本大道DVD中文字幕| 国产精品久久久一区二区三区| 亚洲操逼电影| 久久久久久网站| 日韩无码高清视频| 黄色小说在线看| 亚洲第一色图| 欧美黄色片在线观看| 北条麻妃一区二区三区-免费免费高清观看 | 91人妻人人澡人人爽人妻| 男女啪啪免费| 91视频网站免费观看| 亚洲人成小说| 国产三级片视频| 黄片WWW| 久久午夜福利电影| 99热免费在线| 日本无码在线观看| 狠狠操婷婷| 337p大胆色噜噜噜噜噜| AA片在线观看视频在线播放| 欧美性爱18| 亚洲无码综合| 人妻77777| 99精品国自产在线| 大香蕉伊人在线观看| 日本性爱网址| 狠狠狠狠狠狠狠| 黄网站在线观看| 人妖和人妖互交性XXXX视频| 91人妻最真实刺激绿帽| 91九色丨国产丨爆乳| 91乱| 91人人干| 免费在线无码视频| 日韩无码免费播放| 免费福利在线视频| 亚洲日韩免费观看| 狼人社區91國產精品| 丁香花激情网| 婷婷久久综合久色| 岛国AV免费在线| 成人精品水蜜桃| 精品一区二区三区蜜桃臀www | 成人动漫免费观看| 少妇黄色视频| WW免费视频| 欧美性受XXXX黑人XYX性爽冫 | 天堂a在线8| 大香蕉精品视频| 日韩A级视频| 亚洲一级黄色视频| 亚洲精品一区二区三区四区高清| 91精品久久久久久久久| 欧美午夜精品| 日韩一区二区三区无码| 欧美日屄| 人人艹在线| 日本免费一级片| 国产成人精品免高潮在线观看| 亚洲av中文| 亚洲黄色视频在线免费观看| 亚洲无码网址| 在线观看免费视频a| 色色五月天婷婷| 影音先锋久久久久AV综合网成人| 欧美亚洲成人在线| 98无码人妻精品一区二区三区| 国产乱子伦精品免费,| 被男友内S~高H文| 91福利在线视频| 91黄色在线视频| 99这里有精品| 91人妻人人澡人人爽人人精品一| 91免费福利| 亚洲精品久久久久久久蜜桃| 亚洲人妻在线视频| 九色91PORNY国产| 黄色A片视频| 国产青草视频| 中文字幕东京热加勒比| 成人午夜在线| 国产精品成人3p一区二区三区| 97色色五月天| 老鸭窝av免费入口在线观看 | 俺去俺来也www色视频| 精品黄色视频| 人人狠狠综合婷婷| 亚洲AV小说| 老女人操屄| 亚洲精品97久久中文字幕| 国产婬片lA片www777| 无码免费观看视频| 超碰人妻97| 极品小仙女69| 国产精品视频福利| 成人理论片| 欧美日韩黄片| 亚洲AV免费电影| 国产精品一级无码免费播放| 亚洲在线视频播放| 嫩BBB槡BBBB槡BBBB百度| 中文字幕在线观看完整av| 青草草在线| 日韩69视频| 中国操逼网| 五月天久久| 91精品国际| 黄色A片网站| 尿在小sao货里面好不好| 人人妻人人澡人人爽久久| 黄色影院在线观看| 日韩群交视频| 久草视频99| 中文字幕11页| 国产成人中文字幕| 新狠狠干| 日本AⅤ在线| 日韩少妇无码视频| 91九色麻豆| 强奷伦奷片91| 亚洲成人一级片| 久久不雅视频| 日韩欧美综合| 激情丁香五月天| 在线香蕉| 成人精品永久免费视频99久久精品 | 特级西西人体444www高清大胆| 中文字幕免| 国产精品天天狠天天看| 影音先锋成人av| 成人无码区免费AV片| 日本18禁网站| 蜜桃黄片AV在线观看| 成人AV电影在线观看| 国产综合亚洲精品一区二| 无码人妻系列| 中文字幕不卡一区| 国产精品TV| 欧美大香蕉视频| 阿宾MD0165麻豆沈娜娜| 99成人电影| 蜜乳av红桃嫩久久| 草逼毛片| 色婷婷影音| 噜噜噜在线| 图片区视频区小说区| 国产福利视频在线| 欧美色视频在线观| 夜色福利在线看| 欧美视频一| 东京热黄色电影| 中文成人无字幕乱码精品区| 日本超碰在线| 日韩三级小说| 夜夜骑射| 青青久久91| 九九视频网| 国产av日韩| 欧美性爱福利| 亚洲婷婷五月| 操逼视频观看免费| 欧美大屌网站| 欧美日韩在线看| 精品无码专区| 国产在线第一页| 亚洲欧洲久久电影| 97在线观看免费视频| 成人免费观看视频| 日韩免费高清在线视频| 婷婷丁香五月花| 国产精品国产精品国产专区不52| 一级二级三级无码| 成人电影久久| 欧美三级长视频| 国精品无码一区二区三区在线| 中文字幕免费在线观看视频| 免费人成网站| 神马午夜久久| 动图综合亚洲综合欧美男男 | 波多野结衣操逼| 99在线看| 第一福利视频导航| 九九99电影| 国产精品操逼网站| 青青草原成人在线视频| A在线免费观看| 六月伊人| 校园春色成人| 加勒比无码视频| 国产美女全裸网站| 男女激情网站| 又大又长又粗91| 亚洲精品国产精品国自产A片同性| 亚洲精品中文字幕乱码三区91| av免费播放| AⅤ中文字幕在线免费观看| 国产黄色视频在线播放| www.18av| 亚洲人网站| 激情男人网| 老司机午夜免费精品视频| 国产亚洲天堂| 亚洲一区二区在线免费观看| 特黄特黄免费看| 一区二区三区四区成人| 久草国产视频| 欧美精品秘一区二区三区蜜臀| 综合天堂网| 国产精品囯产三级囯产AV野外| 中国一级黄色毛片| 大地二中文在线观看免费鲁大师| 国产不卡精品| 欧美性交网| 久久这里只有精品99| 国产骚逼| 欧美AAA| 在线日韩AV| 成人精品免费| 丝袜东京热AV高清| 天天干婷婷五月天| 亚洲中文久久| 中文字幕在线免费视频| 香蕉av在线| 日韩亚洲在线观看| 亚洲精品一区二区三区在线观看| 国产无码电影| 亚洲一级无码视频| 囯产精品99久久久久久WWW| 日韩综合精品中文字幕66| 成人网站视频在线免费观看| 成人一区在线观看| 无码做爱视频| 色99999| 北条麻妃二区三区| 成人亚洲AV| 爱搞视频在线观看| 日韩不卡视频在线观看| 中文在线高清字幕| 久色无码| A级视频免费观看| 日韩在线精品视频| 日韩一级一片内射视频4K| 亚洲免费视频一区| 91爱爱视频| 老司机在线免费视频| 99热精品国产| 男女日逼视频| 国产又爽又黄免费观看| 七十路の高齡熟妇无码| www五月天com| 黄色电影天堂| 色网在线观看| 在线性视频| 欧美第1页| 日本中文字幕乱伦| 亚洲秘一区二区三区-精品亚洲二区- | 午夜AV在线免费观看| 伊人亚洲| 人人操狠狠操| 久热官网| 无套内射免费视频| 在线毛片网站| 日韩中文毛片| 中文不卡在线| 日韩精品视频在线| 四虎影成人精品A片| 亚洲欧洲中文字幕| 欧美日韩国| 五月天激情性爱| 午夜操一操一级| 国产农村妇女精品一二区| 五月丁香网站| 久久久久a| 亚洲一区中文字幕| 久久久久久久久久久国产精品 | 日韩欧美高清| 91av一区| 九色在线视频| 热久色| 巜人妻初尝按摩师BD中字| 国产欧美第一页| 大香蕉在线伊| 伊人网在线免费视频| 精品亚洲无码视频| 私人玩物』黑絲OL尤物| 91无码成人| 日韩中文字幕在线| 天堂网在线播放| 欧美日韩国产在线| 亚洲精品国产精品国自产网站| 色婷婷丁香五月天| 精品国内视频| www.911国产| 天天干天天操天天拍| 琪琪色视频| 国产在线观看一区| 欧美成人三级| 男女做爱无码| 99re在线视频观看| 最好看2019中文在线播放电影| 成人无码一区二区三区| 国产一区亚洲| www.精品视频| 国产91小视频| 夜夜夜操| 黄色高清视频在线观看| 亚洲自拍电影| 看免费黄色录像| 西西4444www大胆无| 国产99久久久精品| 成人特级毛片| 操逼网123首页| 嫩草国产| 99久久大香蕉| 久久五月婷| 久久亚洲精品视频| 久色| 国产AV无码专区| 午夜免费福利| 亚洲一区二区三区在线播放| 日韩中文字幕在线| 国产午夜精品一区二区| 短发半推半就AV| 国产黄色视频在线观看免费| 伊人AV在线| 久操福利视频| 国产精品夜夜爽3000| 国产亲子乱XXXXinin| 黄色免费福利视频| 成人av一区| 9无码| 国产成人网| 中文字幕天堂在线| 91人妻人人澡人人精品| 青久久久| 牛牛成人在线视频| 中国无码视频| 影音先锋乱伦电影| 天天日天天射天天干| 欧美一二三| 国产十八岁在线观看免费| 国产白丝精品91爽爽久久| 日韩视频一区| 337P人体美鮑高清| 蜜桃久久久久久久| 国产一级片免费看| 台湾无码精品| 五月婷婷av| 免费欧美黄色| 无限高潮| 一级国产欧美成人A片| 一级黄色影院| 六月激情婷婷| 高清无码视频免费| 五月天黄色电影| 97国产高清| 亚洲无码A片在线| 三级网站大全| 精品1区2区| 91在线亚洲| 免费18禁网站| 日韩一级乱伦| 精品九九九九| 亚洲污污| 最新版本日本亚洲色| 久久婷婷网| 色就是亚洲| 黑人久久| 东京热黄色电影| 日韩亚洲中文在线| 婷婷色网站| 动漫3D成人H无码国漫| 无码精品ThePorn| 欧美色视频一区二区三区在线观看| AⅤ视频在线观看| 337p大胆色噜噜噜噜噜| 精品三级网站| 婷婷导航| 亚洲无码成人网| 91亚瑟视频| 日韩无码影院| 一本色道久久综合无码人妻软件 | 无码高清免费| 99免费在线视频| 欧洲天堂在线视频网站| 免费A片观看| 国产乱色精品成人免费视频| 中文人妻第9页| 欧美一级在线免费观看| 综合狠狠| 亚洲无码综合| 小视频你懂的| 五月天丁香婷婷视频| 亚洲中文字幕在线免费观看视频| 影音先锋久久久| 亚洲欧美精品AAAAAA片| 国产伊人大香蕉| 日韩精品成人av| 午夜成人福利视频| 激情国产在线| 北条麻妃一区二区三区在线播放 | 高清视频一区二区| 久操视频免费看| 日本黄色的视频| 国产成人精品在线| 黄色免费在线网站| 黄色一级生活片| 日韩无码一级片| 先锋资源一区| 52妺嘿嘿午夜福利在线| 操碰97| 水蜜桃视频在线| 大香蕉尹人在线视频| 国产激情视频在线观看| 天天日夜夜草| 日韩综合精品| 亚洲黄色av| 久久精品成人| 成人午夜天堂| 亚洲国产97| 四虎成人网站| 亚洲无码在线播放视频| 免费视频在线观看黄| 高潮视频在线观看| 中文字幕2025年最好看电视剧| 激情五月天开心网| 在线免费观看黄片| 日韩免费黄色电影| AV无码一区二区三区| 四虎色情| 亚洲免费视频在线| 少妇高潮喷水视频| 婷婷日韩在线| 99在线观看视频| 蜜桃BBwBBWBBwBBw| 天啪| 成人性生交大片免费看小芳| 日韩va| 97午夜福利| 日韩在线成人中文字幕亚洲| 精品国产免费观看久久久_久久天天 | 日本午夜无码| 西西人体大胆ww4444图片| 在线第一页| 九九精品视频在线观看| 精品一区二区三区四区五区| 99青青草| 日日干天天| 九一香蕉视频| 在线观看日韩精品| 亚洲激情性爱| 亚洲日本在线观看| 国产日韩欧美一区| 国产卡一卡二在线| 性猛交╳XXX乱大交| 久色| 亚洲精品熟女| 国产美女福利| 天天爽天天爽夜夜爽| 日本免费爱爱视频| 一级A黄片| 91丨九色丨熟女泻火| 草av| 操逼视频免费看| 自拍AV在线| 亚洲日韩视频在线播放| 人人干人妻| 狠狠躁日日躁夜夜躁A片视频| 动漫3d啪啪成人h动漫| 国产成人精品av| 天天天日天天天天天天天日歌词| 日屄在线观看| 午夜操| 欧美级毛片一夜| 可以在线观看的AV| 国语精品自拍| 麻豆视频在线看| 大香蕉尹人网| 日韩成人高清无码| 亚洲天堂精品在线| 黄色一级大片在线免费看国产| 成人免费毛片果冻日本| 免费黄色大片| 色婷婷AV一区二区三区软件| 国产精品污www在线观看| 国产乱叫456在线| 夜色321| 麻豆一区二区三区| 婷婷免费视频| 安徽妇搡BBBB搡BBBB袄爱直播| 日韩亚洲精品中文字幕| 特级西西444www高清大胆免费看| 99视频在线| 先锋影音av在线| 中文字幕天天干| 9热在线视频| 中国12一13毛片| 俺去了无码| 波多野结衣黄色| av天堂亚洲| 亚洲自拍网站| 一区二区在线免费观看| 日本特黄视频| 天天日天天日天天日| 日韩小视频| 色播五月婷婷| 麻豆av在线观看| 成人先锋| 亚洲无码乱码av| 亚洲国产精品自| 阿宾MD0165麻豆沈娜娜| 日本www色| 成人av天堂| 欧美夜夜骑| 人妻少妇精品无码| 亚洲乱伦av| 精品视频久久久久久| 国产美女自拍| 久久免费精品视频| 内射极品美女| 国产嫩BBwBBw高潮| 成人性爱视频网站| 中文字幕一级A片高清免| 国产欧美综合一区| 韩国日本美国免费毛片| 五月婷婷丁香五月| 亚洲秘无码一区二区三区,| 色拍拍视频| 性爱一级| 宅男噜噜噜66一区二区| 国产91高跟丝袜| 日本少妇bbw| 青榴视频免费观看| 高清无码黄片| 苍井空一区二区| 二区三区在线| 色射网| 日韩免费小视频| 99激情网| 好屌肏| 小黄片高清无码| 中文字幕系列| 国产日逼视频| 狼友视频在线| 在线观看黄色av| 俺去啦在线视频| 熟妇在线| 亚洲1区| 我想看操逼| 综合AV在线| 欧洲AV片| 超碰最新在线观看| 操你啦青青草| 亚洲国产高清在线观看视频| www.狠狠操| jizz在线观看视频| 国产XXXXX| 东京热av在线| 久久伊人草| 亚洲.欧美.丝袜.中文.综合| 日本AAAA片| 永久免费AV| 欧美日韩高清丝袜| 伊人久久大香蕉国产| 成人影片在线观看18| 国产精品一区网站| 欧美性爱操逼视频| 国产亚洲午夜久久久成人电影| 中文字幕有码在线观看| 国产精品成人无码免费| 在线看黄片| 97精品在线| 操日本逼| 97精品国产97久久久久久免费| 欧美性BBB槡BBB槡BBB| 国产视频黄| 亚洲中文无码电影| 国产精品av在线播放| 欧美激情一级| 人人操人人人| 日本黄色片在线播放| 一级特黄大片录像i| 影音先锋乱伦电影| 久久久精品国产视频| 四虎在线视频观看96| 国产操女人| 欧美一级黄色性爱视频| 特级西西人体444WWw高清大胆| 伊人午夜| 99热8| 大香蕉人妻| 国产成人精品一区二区| 久久精品福利视频| 中文字幕久久无码| 国产成人无码一区二区在线| 黄色资源在线观看| 成人电影一区| 操啊操| 免费AV片| 九九99精品| 成人乱无码AV在线观看| 欧一美一婬一伦一区二区三区黑人| 日本高潮视频| 国内老熟妇对白HDXXXX| 超碰三级| 成人毛片| 国精品伦一区一区三区有限公司 | 少妇做爱特级AAA| 欧美成人精品激情在线观看| 成人毛片一区二区三区无码 | 东北女人毛多又黑A片| 蜜桃传媒AV| 人人色人人草| 伊人免费视频在线观看| www.91九色| 亚洲精品在线观看免费| 日韩不卡中文字幕| 国产日逼片| 国产成人一区二区无码| 美女网站视频黄| 国产精品v欧美精品v日韩| 亚洲偷拍视频| 亚洲精品一级| 黄色a级毛片| 久久偷看各类wc女厕嘘嘘偷窃| 粉嫩小泬BBBBBB免费看| 欧美AAA在线观看| 嫩BX区二区三区的区别| 久久久久成人精品无码| 亚洲视频黄色| 亚洲无码观看视频| 嫩BBB槡BBBB槡BBBB撒尿| 人妻无码久久| 爱爱黄色视频| 国产精品国产精品国产专区不片| 一级A片一毛片大全| 日韩AV无码电影| 欧美精品久久久久久久久老牛影院| 影音先锋一区二区| 亚洲色吧| 午色婷婷国产无码| 大地8免费高清视频观看大全| 少妇搡BBBB搡BBB搡打电话| 级婬片AAAAAAA免费| 中文字幕+乱码+中文字幕一区| 午夜久久福利| 国产午夜精品一区二区三区四区| 桃花岛tⅴ+亚洲品质| 草榴在线视频| 无码在线观看免费视频| 一级黄色网| 黄色视频网站在线观看免费| 成人H动漫精品一区二区三区蘑菇 高清无码视频在线免费观看 | 欧美国产精品一区二区三区| 国产精品秘ThePorn| 大香蕉免费在线观看| 97日日| 久久综合伊人| 三级三级久久三级久久18| 亚洲精品偷拍| 国产一级内射| 久久久久久国际四虎免费精品视频 | 另类天堂| 欧美色欲| 色哟哟一区二区三区四区| 性爱av在线观看| 骚逼久久| av中文无码| caopeng97| 亚洲天堂男人| 亚洲免费视频在线| 国产精品久久久久久久久久乐趣播| gay成人在线观看| 成人婷婷五月| 岛国免费视频| 国产AV直播| 国产在线高清| 成人午夜在线| 91久久久久久久| 国产中文字幕在线播放| 精品视频一区二区三区四区| 韩国中文字幕HD久久精品| 欧美三级免费| 无码国产99精品久久久久网站| 91人妻人人澡人人添人人爽| 色综合久久久无码中文字幕999 | 亚洲你懂的| 无码av在线播放| 婷婷久久五月天| 中文字幕一区二区蜜桃| 中文在线а√天堂8| 日韩av无码电影| 午夜福利100理论片| 国产五月| 人人天天夜夜| 在线视频a| 激情片AAA| 中文字幕精品一区久久久久 | 日本毛片在线观看| 97超碰在| 国产97视频| 综合天堂网| 亚洲无码一区二区三区妃光| 日韩无码电影| 二区三区免费视频| 无码色色| 色综合色| 2025最新偷拍| 中文字幕在线播放av| 中文字幕巨肉乱码中文乱码| 精品无码三级在线观看视频| 91麻豆影院| 91热视频| 国产最新在线视频| 亚洲日韩在线视频观看| 99re66| 欧美网站在线观看| 日日干天天| 青误乐在线播放| 日韩AV电影网| 亚洲天堂成人在线| 日本视频一区二区| 中文无码日本一级A片久久影视| 91精品国产乱码久久久竹菊| 日本一级片在线播放| 伊人热久久| 成年人黄色视频网站| 日本三区| 久久黄网| 蜜臀AV一区二区三区免费看| 深爱开心激情| 3D动漫精品一区二区在线播放免费| 91精品国产综合久久久蜜臀主演| 欧美日韩91| 青草伊人av| 亚洲免费视频在线看| 欧美人妻无码| 黄色视频在线观看国产| 一道本在线观看| 成人肏逼视频在线| 国产三级图片| 91人妻人人澡人人爽人妻| 亚洲天堂综合网| 日韩性爱在线| 亚洲中文视频在线| 五月天婷婷黄色| 欧美高潮喷水| 亚洲视频网| 天天干夜夜操熟女| 国精自拍| 日韩免费中文字幕| 自拍偷拍无码| 欧美日韩视频一区二区三区| 青娱乐亚洲视频在线| 91香蕉视频免费在线观看| 99爱在线观看| 一级片在线播放| 亚洲色男人天堂| 亚洲操逼电影| 欧美一区二区三曲的| 欧美午夜精品| 国产福利免费视频| а中文在线天堂精品| 午夜福利资源| 久久久精品| 97精产国品久久蜜桃臀| 欧一美一婬一伦一区二区三区黑人-亚| 北条麻妃在线观看| 尤物视频在线播放| 人妻丰满熟妇| 无码二区三区| 亚洲综合免费观看高清完整版| 天天日天天干天天操| AV观看免费| 成人午夜在线观看| 青草91| 伊人成人视频在线观看| 999这里只有精品| 中文电视剧字幕在线播放免费视频| 国产黄片免费观看| 強暴人妻一区二区三区| 乱伦乱码| 日韩精品视频一区二区| 99性爱视频| 成年人AV| av在线免费观看网址| 久久精品国产视频| 天天噜天天操| 日韩一区二区三区无码| 一本一道无码免费看视频| 91日韩在线| 国产丝袜久久| 国产黄色视频网站在线观看| 麻豆国产| 婷婷激情五月综合| 日韩精品A片| 大香蕉尹在线| 日本伊人在线综合视频| 97人妻精品一区二区三区软件 | 久久久精品午夜人成欧洲亚洲韩国| 黄色成人在线视频| 色男天堂| 欧美日韩一区二区三区四区| 日韩无码视| 麻豆蜜桃wwww精品无码| 一级特黄毛片| 日本熟妇一区二区三区| 狠狠干| 超碰人人爱人人操| 深爱五月激情网| 婷婷激情综合| 黄色小视频在线| A国产| 黄片www| 亚洲午夜久久| 欧美日韩国产中文字幕| 五月丁香综合| 国产精品乱码一区二区三区| 日本视频一区二区| 国产精品无码在线观看| 91成全在线| 69AV视频在线观看| 人人草人人干| 狠狠搞狠狠操| AV无码中文| 午夜精品一区二区三区在线视频| 中文字幕精品三区无码| 亚洲无码高清一区| 黄网在线| 亚洲婷婷在线观看| 色婷婷日韩精品一区二区三区| 91成人片| 亚洲无码中文字幕在线| 91人妻无码精品蜜桃| 日韩精品在线免费视频| 中文字幕成人影片| 日韩乱伦电影| 麻豆精品传媒国产剧的特点| 99亚洲天堂| 九九超碰| 欧美性猛交| 做爰视频毛片下载蜜桃视频。 | 丁香激情五月天| 色XXX| 青娱乐伊人| 日韩经典视频在线播放| 国产一级a免一级a免费| 久久久久亚洲AV成人网人人软件 | 人妻夜夜爽天天爽| 黄色小视频在线免费观看| 欧美久久国产精品| 一线毛片| 成人在线黄色视频| 免费视频久久久| 波多野结衣国产| 撸撸视频| 亚洲AV一二三区| 91精品人妻一区二区三区蜜桃欧美| 青青草综合视频| 亚洲a片在线观看| 亚洲综合激情五月久久| 日韩一级内射| 亚洲操片| 精品国产AV鲁一鲁一区| www.99av|