为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 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 关注
  • 99 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信