打印
00
修改实例的属性,
class A(object):#类属性count = 0a = A()a.count = 5print('In class,',A.count)print('In instance,',a.count)
打印
In class, 0In instance, 5
修改类中的属性,
class A(object):#类属性count = 0a = A()A.count = 5print('In class,',A.count)print('In instance,',a.count)
打印
In class, 5In instance, 5
可总结出:类属性只能通过类对象来修改,无法通过实例对象来修改;
class A(object):def __init__(self):#实例属性self.name = 'Tom'a = A()print(a.name)
打印Tom
在初始化中定义的属性为实例属性,只能通过实例属性来访问和修改,类对象无法访问和修改 。
如,
class A(object):def __init__(self):#实例属性self.name = 'Tom'a = A()print(A.name)
报错: type'A' has no'name'
在类中定义的以self为第一个参数的方法都是实例方法;
实力方法在调用时,会将调用对象作为self传入;
class A(object):def __init__(self):#实例属性self.name = 'Tom'def test(self):#实例方法print('in test')a = A()a.test()
打印in test
类对象调用时,
class A(object):def __init__(self):#实例属性self.name = 'Tom'def test(self):#实例方法print('in test')a = A()A.test()
报错: test()1: 'self'
但是通过类对象调用时,传入实例对象多为方法的参数不会报错 。
即通过类对象调用方法时,不会自动穿self,必须手动传self 。
class A(object):def __init__(self):#实例属性self.name = 'Tom'def test(self):#实例方法print('in test')a = A()A.test(a)
输出结果相同 。
即a.test()等价于A.test(a) 。
可以通过装饰器来调用类方法;
类方法的第一个参数是cls,也会被自动传递,cls就是当前的类对象 。
class A(object):count = 0def __init__(self):#实例属性self.name = 'Tom'def test(self):#实例方法print('in test')@classmethoddef test2(cls):#实例方法print('in test2',cls)a = A()A.test2()
打印in test2
调用类属性,
class A(object):count = 0def __init__(self):#实例属性self.name = 'Tom'def test(self):#实例方法print('in test')@classmethoddef test2(cls):#实例方法print('in test2',cls)print(cls.count)a = A()A.test2()
打印
in test2
通过实例调用类方法,
class A(object):count = 0def __init__(self):#实例属性self.name = 'Tom'def test(self):#实例方法print('in test')@classmethoddef test2(cls):#实例方法print('in test2',cls)print(cls.count)a = A()a.test2()
结果相同 。
可总结:类方法可以通过类对象调用,也可通过实例方法调用 。
A.test2()等价于a.test2() 。
静态方法:
用装饰器来调用类方法
- 最神秘的三座陵墓,一座不能挖,一座不敢挖,另一座挖不动
- 明明是一代传奇词人,偏偏无奈生在帝王家
- 一个开创出了盛世,同时也是历史上最大的败家子的帝王
- 宋仁宗:历史上最宽仁的皇帝之一却也难过美人关
- 一条杆棒等身齐:揭开太祖赵匡胤的武功有多高
- 乾隆皇帝一生最大的过错是什么?他为何这样做
- 三国十大家门不幸的美女:最后一个让人脊背发凉
- 【地图学】二、地图矢量化
- 【批量改文件夹中的图片名称-python】
- 60升电热水器功率一般多大