pythonクラスメソッド(classmethod)小実験コード

1927 ワード

class c(object):
    foralll = 8
    def __init__(self, i, forall):
        self.i = i
        self.test = 0
        self.foralll = forall


        print self.i
        print self.foralll


    def do_print(self):
        print "OK"


    @classmethod
    def do_print_again(clss):
        print "OKOK"


    @classmethod
    def smthd(clss, i, forall):
        clss.foralll = forall
        print clss.foralll
        clss.do_print_again




cc = c(0,0)
cc.do_print()
c.smthd(2, 3)
 
 
result:
        0
        0
        OK
        OKOK
        3

pythonには2つの 、クラスと があり、def XXX(self)の 、self.XXXの はすべてインスタンスからしか び せない
インスタンスとは,コード の「cc」を し,クラスをインスタンス した である.
@classmethod を つメソッドは、クラス で じ@classmethod で されたメソッドのみを び すことができます.
とinitメソッドの に された (クラス ?)
@staticmethodではクラスの やメソッドを び すことはできません
( ) つの テスト
class c(object):
    foralll = 8
    def __init__(self):
        print self.foralll

    @classmethod
    def smthd(clss, i, forall):
        clss.foralll = forall
        print clss.foralll


cc = c()
print cc.foralll
c.smthd(2, 3)
print cc.foralll

result:
8
8
3
3
class c(object):
    foralll = 8
    def __init__(self):
        self.foralll = 0 # differential
        print self.foralll

    @classmethod
    def smthd(clss, i, forall):
        clss.foralll = forall
        print clss.foralll


cc = c()
print cc.foralll
c.smthd(2, 3)
print cc.foralll

result: 
0
0
3
0