第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

房地產設計師是如何工作的?

房地產設計師是如何工作的?

狐的傳說 2019-06-03 14:59:42
房地產設計師是如何工作的?我想了解內置功能是如何實現的。property起作用了。讓我困惑的是property也可以作為裝飾器使用,但它只在作為內置函數使用時才會使用參數,而不是作為裝飾器使用時才會使用參數。此示例來自文獻資料:class C(object):     def __init__(self):         self._x = None     def getx(self):         return self._x    def setx(self, value):         self._x = value    def delx(self):         del self._x     x = property(getx, setx, delx, "I'm the 'x' property.")property其論點是getx, setx, delx還有一根醫(yī)生線。在下面的代碼中property被用作裝飾師。它的對象是x函數,但在上面的代碼中,參數中沒有對象函數的位置。class C(object):     def __init__(self):         self._x = None     @property     def x(self):         """I'm the 'x' property."""         return self._x    @x.setter    def x(self, value):         self._x = value    @x.deleter    def x(self):         del self._x還有,你覺得x.setter和x.deleter裝飾師創(chuàng)造的?我很困惑。
查看完整描述

4 回答

?
江戶川亂折騰

TA貢獻1851條經驗 獲得超5個贊

這個property()函數返回一個特殊的描述符對象:

>>> property()<property object at 0x10ff07940>

正是這個對象額外方法:

>>> property().getter<built-in method getter of property object at 0x10ff07998
>>>> property().setter<built-in method setter of property object at 0x10ff07940
>>>> property().deleter<built-in method deleter of property object at 0x10ff07998>

這些人充當裝潢工。也是..它們返回一個新的屬性對象:

>>> property().getter(None)<property object at 0x10ff079f0>

這是舊對象的副本,但是替換了其中一個函數。

記住,@decorator語法只是語法糖;語法:

@propertydef foo(self): return self._foo

真的意味著同樣的事情

def foo(self): return self._foo
foo = property(foo)

所以foo該函數被替換為property(foo)我們在上面看到的是一個特殊的物體。然后當你用@foo.setter(),你要做的就是叫它property().setter方法,它返回屬性的一個新副本,但這次用setter函數替換為修飾方法。

下面的序列還通過使用這些裝飾器方法創(chuàng)建了一個完整的屬性。

首先,我們創(chuàng)建一些函數和一個property對象,只需一個getter:

>>> def getter(self): print 'Get!'... >>> def setter(self, value): print 'Set to {!r}!'.format(value)... >>>
 def deleter(self): print 'Delete!'... >>> prop = property(getter)>>> prop.fget is getterTrue>>> prop.fset is NoneTrue
 >>> prop.fdel is NoneTrue

接下來,我們使用.setter()方法添加一個setter:

>>> prop = prop.setter(setter)>>> prop.fget is getterTrue>>> prop.fset is setterTrue>>> prop.fdel is NoneTrue

最后,我們使用.deleter()方法:

>>> prop = prop.deleter(deleter)>>> prop.fget is getterTrue>>> prop.fset is setterTrue>>> prop.fdel is deleterTrue

最后但并非最不重要的是,property對象充當描述符對象,所以.__get__().__set__().__delete__()方法連接到實例屬性獲取、設置和刪除:

>>> class Foo(object): pass... >>> prop.__get__(Foo(), Foo)Get!>>> prop.__set__(Foo(), 'bar')Set to 'bar'!>>> prop.__delete__(Foo())Delete!

描述符howto包括純python示例實現.的.property()類型:

class Property(object):
    "Emulate PyProperty_Type() in Objects/descrobject.c"

    def __init__(self, fget=None, fset=None, fdel=None, doc=None):
        self.fget = fget
        self.fset = fset
        self.fdel = fdel        if doc is None and fget is not None:
            doc = fget.__doc__
        self.__doc__ = doc    def __get__(self, obj, objtype=None):
        if obj is None:
            return self        if self.fget is None:
            raise AttributeError("unreadable attribute")
        return self.fget(obj)

    def __set__(self, obj, value):
        if self.fset is None:
            raise AttributeError("can't set attribute")
        self.fset(obj, value)

    def __delete__(self, obj):
        if self.fdel is None:
            raise AttributeError("can't delete attribute")
        self.fdel(obj)

    def getter(self, fget):
        return type(self)(fget, self.fset, self.fdel, self.__doc__)

    def setter(self, fset):
        return type(self)(self.fget, fset, self.fdel, self.__doc__)

    def deleter(self, fdel):
        return type(self)(self.fget, self.fset, fdel, self.__doc__)


查看完整回答
反對 回復 2019-06-03
?
慕俠2389804

TA貢獻1719條經驗 獲得超6個贊

下面是一個很小的例子@property可執(zhí)行:

class Thing:
    def __init__(self, my_word):
        self._word = my_word 
    @property
    def word(self):
        return self._word>>> print( Thing('ok').word )'ok'

不然的話word保留方法而不是屬性。

class Thing:
    def __init__(self, my_word):
        self._word = my_word    def word(self):
        return self._word>>> print( Thing('ok').word() )'ok'


查看完整回答
反對 回復 2019-06-03
?
拉丁的傳說

TA貢獻1789條經驗 獲得超8個贊

第一部分很簡單:

@propertydef x(self): ...

是相同的

def x(self): ...x = property(x)
  • 而這反過來又是創(chuàng)建

    property

    只需要一個吸氣器。

下一步是使用setter和刪除器擴展此屬性。這種情況發(fā)生在適當的方法上:

@x.setterdef x(self, value): ...

返回繼承舊屬性中所有內容的新屬性。x加上給定的策劃人。

x.deleter同樣的工作方式。


查看完整回答
反對 回復 2019-06-03
  • 4 回答
  • 0 關注
  • 624 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號