Python Recap 重新审视Python - 1 Python中的类

  对所有面向对象语言研究中,关于类方法研究总是通往该语言大师的必经之路,下里来说说说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一样)都是代表本身的意思,这个当成规范就好了

posted @ 2017-06-30 16:16  DavidWan  阅读(217)  评论(0)    收藏  举报