如何在python中调用同一个类内的静态方法

时间:2016-02-17 14:25:46

标签: python

我在同一个类中有两个静态方法

class A:
    @staticmethod
    def methodA():
        print 'methodA'

    @staticmethod
    def methodB():
        print 'methodB'

如何调用methodA内的methodBself似乎在静态方法中不可用。

2 个答案:

答案 0 :(得分:6)

事实上,self在静态方法中不可用。 如果使用了装饰@classmethod而不是@staticmethod,则第一个参数将是对类本身的引用(通常命名为cls)。 但尽管如此,在静态方法methodB()中,您可以直接通过类名访问静态方法methodA()

@staticmethod
def methodB():
    print 'methodB'
    A.methodA()

答案 1 :(得分:0)

正如@Ismael Infante所说,您可以使用classmethod

 input {
      file {
            tags => ["stacktrace"]
            type => "error_logs"
            path => ["/Users/znrind-a0053/Downloads/logs/zapp-audit.log"]
            start_position => "beginning"
            sincedb_path => "/tmp/sincedb_file"
            codec => multiline {
            pattern => "^%{TIMESTAMP_ISO8601} "
            negate => true
            what => previous
            }
      }

}
filter {

      if "userSession" in [message]{
        grok {
        match => [ "message",
                 "%{TIMESTAMP_ISO8601:timestamp_match} %{USERNAME:orgId} (\[%{DATA:thread}\])?( )?%{LOGLEVEL:level}%{SPACE}%{USERNAME:zhost} %{JAVAFILE:javaClass} %{URI:url}%{SPACE}(?<email>[\w.+=:-]+@[0-9A-Za-z][0-9A-Za-z-]{0,62}(?:[.](?:[0-9A-Za-z][0-9A-Za-z‌​-]{0,62}))*)%{SPACE}%{USERNAME:orgnisation}"]
          }
      } else {

      grok {
      match => [ "message",
               "%{TIMESTAMP_ISO8601:timestamp_match} %{USERNAME:orgId} (\[%{DATA:thread}\])?( )?%{LOGLEVEL:level}%{SPACE}%{USERNAME:zhost} %{JAVACLASS:javaClass} %{USERNAME:logmessage}:?%{SPACE}%{USERNAME:orgnisation}%{SPACE}%{USERNAME:loginUserId}%{SPACE}%{USERNAME:sessionId}%{SPACE}%{USERNAME:txnId}"]
        }
      }
}
output {
        elasticsearch {
            hosts => "localhost"
            index => "logs"
        }
        stdout{codec => json}
}

自变量中的class A: @staticmethod def methodA(): print 'methodA' @classmethod def methodB(cls): cls.methodA() 代表类A本身。