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一样)都是代表本身的意思,这个当成规范就好了

转载于:https://www.cnblogs.com/DavidWan/p/7099428.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值