白白白白丶白 发表于 2020-7-13 14:44:43

类方法

class ClsMethod():
    objcnt1 = 0

    @classmethod
    def clsmeth1(cls):
      cls.objcnt1 += 1
      cnt1 = cls.getobjcnt() #类方法中通过cls访问类方法
      cnt2 = ClsMethod.getobjcnt() # 类方法中通过列明访问类方法

    @classmethod
    defgetobjcnt(cls):
      print('in getobjcnt(cls)')
      return ClsMethod.objcnt1

    def __init__(self):
      ClsMethod.clsmeth1() # 实例方法中通过类名.方法名访问类方法
      self.__class__.clsmeth1() # 实例方法中通过self.__class__.方法名访问类方法

>>> cm1 = ClsMethod()
in getobjcnt(cls)
in getobjcnt(cls)
in getobjcnt(cls)
in getobjcnt(cls)

实例化的时objcnt1为什么不被读取

qiuyouzhi 发表于 2020-7-13 14:48:04

本帖最后由 qiuyouzhi 于 2020-7-13 14:50 编辑

你的clsmeth1并没有打印结果,当然不会输出objcnt1
代码改成这样:
class ClsMethod():
    objcnt1 = 0

    @classmethod
    def clsmeth1(cls):
      cls.objcnt1 += 1
      cnt1 = cls.getobjcnt() #类方法中通过cls访问类方法
      cnt2 = ClsMethod.getobjcnt() # 类方法中通过列明访问类方法
      return cnt2 # return cnt1也行

    @classmethod
    defgetobjcnt(cls):
      print('in getobjcnt(cls)')
      return ClsMethod.objcnt1

    def __init__(self):
      ClsMethod.clsmeth1() # 实例方法中通过类名.方法名访问类方法
      self.__class__.clsmeth1() # 实例方法中通过self.__class__.方法名访问类方法

青出于蓝 发表于 2020-7-13 14:48:55

print打印?

白白白白丶白 发表于 2020-7-13 14:57:57

qiuyouzhi 发表于 2020-7-13 14:48
你的clsmeth1并没有打印结果,当然不会输出objcnt1
代码改成这样:

一样的,也不打印objcnt1

代码不是执行到getobjcnt方法里的代码了吗,为什么不返回ClsMethod.objcnt1

qiuyouzhi 发表于 2020-7-13 15:17:14

白白白白丶白 发表于 2020-7-13 14:57
一样的,也不打印objcnt1

代码不是执行到getobjcnt方法里的代码了吗,为什么不返回ClsMethod.objcnt1

1,我这里就打印了?
2,你自己看看你写的clsmeth1:
@classmethod
    def clsmeth1(cls):
      cls.objcnt1 += 1
      cnt1 = cls.getobjcnt() #类方法中通过cls访问类方法
      cnt2 = ClsMethod.getobjcnt() # 类方法中通过列明访问类方法
有return或者print吗?一个都没有,能有结果才怪。

白白白白丶白 发表于 2020-7-13 15:45:10

qiuyouzhi 发表于 2020-7-13 15:17
1,我这里就打印了?
2,你自己看看你写的clsmeth1:



getobjcnt 不是返回了ClsMethod.objcnt1
在clsmeth1里不是给 cnt1和cnt2赋值了getobjcnt()了嘛{:9_229:}

qiuyouzhi 发表于 2020-7-13 15:46:28

白白白白丶白 发表于 2020-7-13 15:45
getobjcnt 不是返回了ClsMethod.objcnt1
在clsmeth1里不是给 cnt1和cnt2赋值了getobjcnt()了嘛{:9_229 ...

那你打印他俩了吗??连return都没有

白白白白丶白 发表于 2020-7-13 15:52:28

qiuyouzhi 发表于 2020-7-13 15:46
那你打印他俩了吗??连return都没有

{:9_241:}getobjcnt函数的返回值不会被赋值到cnt1和cnt2里面奥?

qiuyouzhi 发表于 2020-7-13 16:32:39

白白白白丶白 发表于 2020-7-13 15:52
getobjcnt函数的返回值不会被赋值到cnt1和cnt2里面奥?

会被赋值进去....可是赋值操作不包括输出啊

白白白白丶白 发表于 2020-7-13 16:38:57

qiuyouzhi 发表于 2020-7-13 16:32
会被赋值进去....可是赋值操作不包括输出啊

好的把,谢谢

白白白白丶白 发表于 2020-7-13 16:42:08

qiuyouzhi 发表于 2020-7-13 16:32
会被赋值进去....可是赋值操作不包括输出啊

>>> def a():
        print('in a')
        return 2

>>> x = a()
in a
>>> a()
in a
2
>>> x
2
>>> x
2

简单就是上面的情况呗,

qiuyouzhi 发表于 2020-7-13 16:43:27

白白白白丶白 发表于 2020-7-13 16:42
简单就是上面的情况呗,

蛤?没弄明白你想表达啥

白白白白丶白 发表于 2020-7-13 16:46:11

qiuyouzhi 发表于 2020-7-13 16:43
蛤?没弄明白你想表达啥

那算了,当我没说,我 再看看这又弄函数里面了,
页: [1]
查看完整版本: 类方法