首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python 面向对象之类方法

python 面向对象之类方法

作者头像
py3study
发布2018-08-02 16:41:06
4870
发布2018-08-02 16:41:06
举报
文章被收录于专栏:python3python3

类方法通过@classmethod装饰器实现,类方法和普通方法的区别是, 类方法只能访问类变量,不能访问实例变量

举个例子

class Dog(object):
    def __init__(self, name):
        self.name = name

    @classmethod  # 把eat方法变为类方法
    def eat(self): # 吃东西
        print("%s is eating" % (self.name))


d = Dog("二哈")
d.eat()

执行报错:

AttributeError: type object 'Dog' has no attribute 'name'

意思是:'Dog'类型的对象没有属性名称

不对啊,上面声明了name属性了!为什么呢?

那么引用类变量呢?

class Dog(object):
    n = 'kk' #类变量
    def __init__(self, name):
        self.name = name

    @classmethod  # 把eat方法变为类方法
    def eat(self): # 吃东西
        print("%s is eating" % (self.n))


d = Dog("二哈")
d.eat()

执行输出:

kk is eating

引用类变量,发现没有报错。

再将n改到实例变量呢?

class Dog(object):
    def __init__(self, name):
        self.name = name
        self.n = 'kk' #实例变量

    @classmethod  # 把eat方法变为类方法
    def eat(self): # 吃东西
        print("%s is eating" % (self.n))


d = Dog("二哈")
d.eat()

执行报错:

AttributeError: type object 'Dog' has no attribute 'n'

总结:

类方法只能访问类变量,不能访问实例变量

比如说实例和类,有同样的变量,它需要强制访问类变量的时候

就可以用到类方法了。

我们要写一个只在类中运行而不在实例中运行的方法. 如果我们想让方法不在实例中运行,可以使用类方法。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-04-07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档