首頁 > 後端開發 > Python教學 > 為什麼在 Python 中使用「property()」和「@classmethod」修飾方法會導致錯誤?

為什麼在 Python 中使用「property()」和「@classmethod」修飾方法會導致錯誤?

DDD
發布: 2024-11-27 05:46:17
原創
532 人瀏覽過

Why Does Using `property()` with `@classmethod` Decorated Methods Cause Errors in Python?

在類別方法中使用property()

問題:

在類別方法中使用property() 函數@ classmethod 裝飾器會產生一個錯誤。

範例再現:

class Foo(object):
    _var = 5

    @classmethod
    def getvar(cls):
        return cls._var

    @classmethod
    def setvar(cls, value):
        cls._var = value

    var = property(getvar, setvar)
登入後複製

錯誤:

>>> f = Foo()
>>> f.getvar()
5
>>> f.setvar(4)
>>> f.getvar()
4
>>> f.var
Traceback (most recent call last):
  File <stdin>, line 1, in ?
TypeError: 'classmethod' object is not callable
>>> f.var=5
Traceback (most recent call last):
  File <stdin>, line 1, in ?
TypeError: 'classmethod' object is not callable
登入後複製

解決方案

Python 3.8 及更高版本:

在 Python 3.8 及更高版本中,可以將 property() 函數與 @classmethod 修飾函數一起使用。只需將兩個裝飾器應用於方法即可。

Python 2 和 Python 3(也適用於 3.9-3.10)

在類別上建立屬性,但會影響實例。若要建立類別方法屬性,請在元類別上建立該屬性。

class foo(object):
    _var = 5
    
    class __metaclass__(type):  # Python 2 syntax for metaclasses
        pass

    @classmethod
    def getvar(cls):
        return cls._var

    @classmethod
    def setvar(cls, value):
        cls._var = value
    
登入後複製

以上是為什麼在 Python 中使用「property()」和「@classmethod」修飾方法會導致錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板