属性和方法总结篇
- 类属性,实例属性
- 类方法,实例方法
- 静态方法
class A:
# 直接在类中定义的属性是类属性
# 类属性可以通过类或者类的实例访问
# 但类属性只能通过类对象修改,无法通过实例修改
count = 5
def __init__(self):
# 实例属性,通过实例对象添加的属性
# 实例属性只能通过实例对象来访问修改,类对象无法访问修改
self.name = '小王'
# 实例方法
# 在类中定义,以self为第一个参数的方法都是实例方法
# 实例方法可以通过实例和类去调用:
# 当通过实例调用时,会自动将调用对象作为self传入
# 当通过类调用时,不会自动传递self,此时我们必须手动传递self
def test(self):
print('这是test方法。。',self)
# 类方法
# 在类内部使用 @classmethod 来修饰的方法属于类方法
# 类方法的第一个参数是cls,也会被自动传递,cls就是当前的 类 对象
# 类方法可以通过类去调用,也可以通过实例调用,
# 和实例方法的区别就在于第一个参数是类还是实例对象
@classmethod
def test_2( cls ):
print('这是test_2类方法。。',cls)
# 静态方法
# 在类中使用 @staticmethod 来修饰的方法属于类方法
# 静态方法不需要指定任何默认参数,静态方法可以通过类和实例去掉用
# 静态方法,基本上是一个和当前类无关的方法,它只是一个保存到当前类中的函数
# 举个栗子:假如类是一个车,静态方法就相当于车里的一个箱子,箱子里有扳手,钳子等工具
@staticmethod
def test_3() :
print('静态方法test_3。。')
a = A( )
# 实例属性,通过实例对象添加的属性
a.count = 200# 并没有修改A类中的属性,只是在实例a中添加了a的实例属性count
print('a:',a.count)
print('A:',A.count)
a.test()# 通过实例调用
A.test(a)# 通过类调用
# 两个方法等价的,本质是是一样的
# a.test_2 也等价于 A.test_2
# a.test_3 也等价于 A.test_3