关于用Getter装饰器的使用问题

关于用Getter装饰器的使用问题

相关代码:

        
class test():
    pass
    set = ""
    @property
    def test_pass(self):
        if self.set == "first":
            print('pass')
        return self.set

    @test_pass.setter
    def test_pass(self,value):
        self.set = value


    @test_pass.getter
    def test_pass(self):
        if self.set == "":
            print("您未初始化set的值")
        else:
            return self.set

test_run = test()
test_run.test_pass = "first"
print(test_run.test_pass)

问题描述:

使用定义Getter函数之后调用被定义成属性的方法test_pass之后发现不再使用如下的的判断函数了

 @property
 def test_pass(self):
        if self.set == "first":
            print('pass')
        return self.set

麻烦老师讲解一下原因以及是否存在解决办法

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕小猿 2023-11-01 18:38:52

同学,你好!执行print(test_run.test_pass)时,因设置了@test_pass.getter下的test_pass方法,取值时会覆盖之前的@property 定义的 test_pass方法,所以不会执行@property下的test_pass方法。同学可以不设置getter,便会输出 pass、first 这样的结果,参考代码如下:

class test():
    pass
    set = ""

    @property
    def test_pass(self):
        if self.set== "first":
            print('pass')
        return self.set

    @test_pass.setter
    def test_pass(self, value):
        self.set = value



test_run = test()
test_run.test_pass = "first"
print(test_run.test_pass)

祝学习愉快~

  • 提问者 qq_叶槊_0 #1

    谢谢老师了

    2023-11-02 12:33:01
  • 提问者 qq_叶槊_0 #2

    请问有没有办法使用getteryuan有不覆盖原方法呢,修改方法名可以不

    2023-11-02 12:35:02
  • 好帮手慕小猿 回复 提问者 qq_叶槊_0 #3

    同学,你好!同学可以在自定义方法上使用 @<自定义方法名>.getter 来修饰该方法,这样就可以避免覆盖 @property 下的方法。参考代码如下:

    class test():
        pass
        set = ""
    
        @property
        def test_pass(self):
            if self.set == "first":
                print('pass')
            return self.set
    
        @test_pass.setter
        def test_pass(self, value):
            self.set = value
    
        @test_pass.getter
        def test_pass2(self):
            if self.set == "":
                print("您未初始化set的值")
            else:
                return self.set
    
        @test_pass2.getter
        def up_test_value(self):
            if self.set == "first":
                print('pass')
            return self.set
    
    
    test_run = test()
    test_run.test_pass = "first"
    print(test_run.up_test_value)

    祝学习愉快~

    2023-11-02 20:06:11
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师