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