一、类的属性
1.类属性:直接在类中定义的属性是类属性
- 类属性可以通过类或类的实例访问到。但是类属性只能通过类对象来修改,无法通过实例对象修改(实例修改属性值后,也仅实例实中生效,未修改类里面属性的值)
class A(object):
count=0
a=A()
print(a.count)
print(A.count)
a.count=10
print(a.count)
print(A.count)
A.count=20
print(a.count)
print(A.count)
2.实例属性: 通过实例对象添加的属性属于实例属性
- 实例属性只能通过实例对象来访问和修改,类对象无法访问修改
class A(object):
count = 0
def __init__(self):
self.name = '葫芦娃'
a=A()
a.age=5
print(a.name)
二、类的方法
1.实例方法:在类中定义,以self为第一个参数的方法都是实例方法
- 实例方法在调用时,Python会将调用对象以self传入
- 实例方法可以通过类实例和类去调用
- 当通过实例调用时,会自动将当前调用对象作为self传入
- 当通过类调用时,不会自动传递self,我们必须手动传递self
class A(object):
def __init__(self):
self.name = '葫芦娃'
def text(self):
print('这是test方法',self)
a=A()
a.text()
A.text(a)
- 类名调用实例方法,需要添加参数实例用,即实例名.方法() 等价于 类名.方法(实例名) 。如: a.text() 等价于 A.text(a)
2.类方法:在类的内容以@classmethod 来修饰的方法属性类方法
- 类方法第一个参数是cls 也会自动被传递。cls就是当前的类对象
-类方法可以通过类去调用,也可以通过实例调
class A(object):
count = 0
@classmethod
def text2(cls):
print('这个是test2方法',cls)
print(cls.count)
A.text2()
a=A()
a.text2()
- 实例对象调用类方法,直接调用,即实例名.方法() 等价于 类名.方法() 。如: a.text2() 等价于 A.text2()
3.类方法和实例方法的区别:
- 实例方法的第一个参数是self,类方法的第一个参数是cls
- 类方法定义时,需要加@classmethod来修饰,实例方i法不用
- 在类的方法应用没有什么区别
4.静态方法:在类中用@staticmethod来修饰的方法属于静态方法
- 静态方法不需要指定任何的默认参数,静态方法可以通过类和实例调用
- 静态方法,基本上是一个和当前类无关的方法,它只是一个保存到当前类中的函数
- 静态方法一般都是些工具方法,和当前类无关
class A(object):
@staticmethod
def text3():
print('这个是test3方法')
A.text3()
a=A()
a.text3()