Python 学习笔记
一、属性
1.1、类属性
- 直接再类中定义的属性,就是类属性
- 可以通过类访问,也可以通过实例对象访问
class A(object):
count = 66
print('A:', A.count) # 通过类访问
a = A()
print('a:', a.count) # 通过实例对象访问
- 类属性只能通过类对象来修改,无法通过实例对象来修改
class A(object):
count = 66
a = A()
a.count = 5
print('a:', a.count,' A:', A.count)
A.count = 5
print('a:', a.count,' A:', A.count)
1.2、实例属性
- 通过实例对象添加的属性,就是实例属性
- 只能通过实例对象来访问和修改,类对象无法访问和修改
class A(object):
count = 66
def __init__(self): # self 表示, 当前对象通过 self 来添加到实例的对象当中
self.name = '葫芦娃' # 所以 self 是一个实例属性
a = A()
print(a.name)
# print(A.name) # AttributeError: type object 'A' has no attribute 'name'
a.name = '钢铁侠'
print(a.name)
# A.name = '连访问都做不到, 肯定无法修改...'
二、方法
2.1、实例的方法
- 在类中定义,以
self
为参数的方法都是实例方法 - 实例方法在调用时,Python 会将调用的对象作为
self
传入 - 当通过类调用时,不会自动传入
self
class A(object):
count = 66
def text(self):
print('这是 text 实例方法...', self)
a = A()
a.text()
# A.text() # 报错, 缺少参数 'self'
A.text(a) # 等价于 a.text()
2.2、类方法
- 在类的内部使用
@classmethod
来修饰的方法,就是类方法 - 类方法第一个参数是
cls
,会被自动传递,cls
就是当前的类对象
class A(object):
count = 66
@classmethod
def text2(cls):
print('这是 text2 类方法...', cls)
a = A()
A.text2()
a.text2() # 等价于 A.text2()
类方法 & 实例方法的区别: 实例方法第一个参数是 self
,类方法第一个参数是 cls
。
2.3、静态方法
- 在类中内部使用
@staticmethod
来修饰的方法,属于静态方法 - 静态方法不需要指定任何默认的参数,静态方法可以通过类和实例去调用
- 静态方法是一个独立的、单纯的函数,只是仅仅托管于某个类中,其实就是方便咱们使用和维护
class A(object):
count = 66
@staticmethod
def text3():
print('text3 静态方法执行了...')
A.text3()
a = A()
a.text3()