首页
学习
活动
专区
圈层
工具
发布

python 面向对象之类方法

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

举个例子

代码语言:javascript
复制
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属性了!为什么呢?

那么引用类变量呢?

代码语言:javascript
复制
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改到实例变量呢?

代码语言:javascript
复制
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'

总结:

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

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

就可以用到类方法了。

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

下一篇
举报
领券