亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

如何在 python 的方法中使用屬性函數?

如何在 python 的方法中使用屬性函數?

守候你守候我 2022-10-06 15:59:56
我嘗試編寫代碼 2 來做與代碼 1 相同的事情。但是,代碼 2 不起作用。為什么?如何在 python 的方法中使用屬性函數?(代碼 1)class Spam:    def __init__(self, is_less_sodium):        self.__is_less_sodium = is_less_sodium    def __getter(self):        return self.__is_less_sodium    is_less_sodium = property(__getter)my_spam = Spam(False)print(my_spam.is_less_sodium)########## Result ########### False(代碼 2)class Spam:    def __init__(self, is_less_sodium):        self.__is_less_sodium = is_less_sodium        Spam.is_less_sodium = property(self.__getter)    def __getter(self):        return self.__is_less_sodiummy_spam = Spam(False)print(my_spam.is_less_sodium)########## Result ########### Traceback (most recent call last):#   File "code2.py", line 10, in <module>#     print(my_spam.is_less_sodium)# TypeError: __getter() takes 1 positional argument but 2 were given我理解代碼1中的返回值property(__getter)是賦值給的is_less_sodium,這是一個類變量Spam。但是,這種理解似乎是錯誤的。
查看完整描述

1 回答

?
慕尼黑的夜晚無繁華

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

class Spam:

    def __init__(self, is_less_sodium):

        self.__is_less_sodium = is_less_sodium

        Spam.is_less_sodium = property(Spam.__getter,)


    def __getter(self):

        return self.__is_less_sodium


my_spam = Spam(False)

print(my_spam.is_less_sodium)

您可以使用該語法,但您還必須從類級別引用該函數,而不是實例函數。


裝飾器語法更簡潔。


class Spam:

    def __init__(self, is_less_sodium):

        self.__is_less_sodium = is_less_sodium


    @property

    def is_less_sodium(self):

        return self.__is_less_sodium


    @is_less_sodium.setter

    def set_is_less_sodium(self):

        self.__is_less_sodium


my_spam = Spam(False)

print(my_spam.is_less_sodium)

my_spam.is_less_sodium = True

print(my_spam.is_less_sodium)


查看完整回答
反對 回復 2022-10-06
  • 1 回答
  • 0 關注
  • 121 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

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

公眾號

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