发布时间:2018-04-07 21:05:16编辑:admin阅读(5685)
类方法通过@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'
总结:
类方法只能访问类变量,不能访问实例变量
比如说实例和类,有同样的变量,它需要强制访问类变量的时候
就可以用到类方法了。
我们要写一个只在类中运行而不在实例中运行的方法. 如果我们想让方法不在实例中运行,可以使用类方法。
上一篇: python 面向对象之静态方法
下一篇: 面向对象作业——校园管理系统
51099
50490
41103
37954
32420
29321
28195
23036
23002
21327
1357°
2050°
1709°
1641°
1931°
1713°
2389°
4025°
3909°
2793°