对所有面向对象语言研究中,关于类方法研究总是通往该语言大师的必经之路,下里来说说说Python中的类
首先说下关于Python中的instance方法也就是实例方法,当然实例方法当然要和classmethod联系起来说。举个栗子
class Student(object): count = 0 area = "China" books = [] def __init__(self, name, age): self.name = name self.age = age @classmethod def talk(word): print word pass Student.books.append("python") Student.talk()
这里看到我们写了一个Student类,一个初始化方法__init__(也就是实例初始化时候调用的方法,当然是实例方法咯),还有一个@classmethod talk()接收一个word参数,看到这里有些童鞋姐陌生了,classmethod方法确实少见,而且这里以装饰器出现(超前了后续文章会有提到),那么这里要注意啥呢,其实就是说的是实例方法在类实例化的时候调用,类方法classmethod在可以直接调用不必实例化,比如你这样写
class Student(object): count = 0 area = "China" books = [] def __init__(self, name, age): self.name = name self.age = age def talk(word): print word pass Student.books.append("python") Student.talk()
这样就会报错了,提示unbound method talk() must be called with Student instance as first argument (got nothing instead)。不好翻译,大概意思是taik()方法必须被student实例调用。而不是类本身,改为下面代码
class Student(object): count = 0 area = "China" books = [] def __init__(self, name, age): self.name = name self.age = age @classmethod def talk(cls, word): print word pass Student.books.append("python") Student.talk("hello world")
注意到这里@classmethod下面talk方法第一个参数cls(约定俗成,和实例方法第一个参数self一样)都是代表本身的意思,这个当成规范就好了