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

定义调用问题:为什么set方法不起作用。1.一个@classmethod下,set在get后,不行;set在get前,可行。2.分别类定义set和get,可行。

class Animal(object):

    __count=0

    def __init__(self,name,age):

         self.name=name

         self.age=age


    @classmethod

    

    def get_count(cls):

        return cls.__count

    def set_count(cls,count):

        cls.__count=count

        

Leo=Animal('herman',22)

print('name:{}\nage:{}'.format(Leo.name,Leo.age))


print('init count:',Leo.get_count())


Leo.set_count(98)

print('changed count:',Leo.get_count())



正在回答

3 回答

实例本身无count,get_count定义的是类方法,因此Leo.get_count()返回Animal的私有属性__count=0,set_count是实例方法对类无效,因此获取的__count 还是原本的0.

1 回复 有任何疑惑可以回复我~

@classmethod 用于标识紧接着它的那一个方法

1 回复 有任何疑惑可以回复我~

    @classmethod

    def get_count(cls):

        return cls.__count

       

    @classmethod    

    def set_count(cls,count):

        cls.__count=count


0 回复 有任何疑惑可以回复我~
#1

hermaniu 提问者

谢谢你的回答,这是我说的第二种方式,分别定义。为什么单独定义一个classmethod标识符,然后再定义两个函数,先后会有区别
2021-11-19 回复 有任何疑惑可以回复我~
#2

weixin_慕圣9105026 回复 hermaniu 提问者

这样的话比如get方法在classmethod下,会作为类的方法,而set方法会作为实例的方法,set更改之后的并不是类中的count,所以你获取的仍然是最初的
2023-06-09 回复 有任何疑惑可以回复我~
#3

weixin_慕圣9105026 回复 hermaniu 提问者

相反,count是类中的变量,所以set作为类的方法将count值更改,get也只能获取的是类中唯一的count值,也就是你set更改的
2023-06-09 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

定义调用问题:为什么set方法不起作用。1.一个@classmethod下,set在get后,不行;set在get前,可行。2.分别类定义set和get,可行。

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信