1、类是一个特殊的对象
python中 一切皆对象
class A : 定义的类属于类对象
obj1 = A 属于实例对象
- 在程序运行时,类同样会被加载到内存中去,
- 在python中,类是一个特殊的对象, —- 类对象
**
- 在程序运行时,类 对象在内存中只有一份,使用一个类 可以创建出很多个对象实例
**
- 除了封装实例 的属性 和方法外,类对象还可以拥有自己的属性和方法
类属性
类方法
- 通过 类名. 的方式可以访问类的属性,或者调用类的方法
类名.属性 | —————》类属性 [该类的所有对象共享通过类名直接访问] |
---|---|
类名.方法名 | ————-》类方法(cls) [该类的所有对象共享通过类名直接访问] |
类名 | ————》init 定义 实例属性 |
对象名.方法名 | ———-》实例方法(self) |
2、类属性和实例属性
2.1 概念和使用
类属性就是给类对象中定义的属性
通常用来记录与这个类相关**的特征
类属性不会用于记录具体对象的特征
在实例方法中给类属性赋值的话 一定要用 类名.类属性** 的方式进行赋值
2.1.1 访问类属性两种方式:
类名.类属性
对象.类属性 【不推荐】
2.1.2 注意:
如果使用 对象.类属性 = 值 赋值语句,只会给对象添加一个属性,而不会影响到类属性的值
2.2 实例需求
定义一个工具类
每件工具都有自己的name
需求—— 知道使用这个类,创建了多少个工具对象?
class Tool(object):
# 计数器 类属性
count = 0
def __init__(self, name):
self.name = name
Tool.count += 1
# 创建工具对象
tool1 = Tool("锤子")
tool2 = Tool("剪刀")
tool3 = Tool("榔头")
print("总共创建了%d个工具" % Tool.count) # 3
3、确定方法类型的套路
- 实例方法 — 方法内部需要访问 实例属性
- 实例方法 内部可以使用 类名. 访问类属性
- 类方法 — 方法内部只需要访问 类属性
**
- 静态方法 — 方法内部 不需要访问 实例属性 和 类属性
4、类方法 (使用类名. 调用)
类方法就是针对类对象定义的方法
在类方法内部可以直接访问类属性或者调用其他的类方法
4.1 语法如下
class Test(object):
@classmethod
def do_some(cls):
pass
- 类方法需要用修饰器 @classmethod 来标识,告诉解释器这是一个类方法
- 类方法的第一个参数应该是 cls
- 由哪一个类调用的方法,方法内的 cls 就是哪一个类的引用
- 这个参数和实例方法 的第一个参数 self 类似
- 提示: 使用其他名称也可以,不过习惯使用 cls
- 通过类名. 调用类方法,调用方法时,不需要传递 cls 参数
在方法内部
tool1 = Tools(“锤子”) tool2 = Tools(“钳子”) tool3 = Tools(“剪刀”)
通过类名调用类方法
Tools.show_tool_num()
<a name="GHY4s"></a>
# 5、静态方法
- 在开发时,如果需要在类中封装一个方法,这个方法:
- 既**不需要**访问**实例属性** 或者调用** 实例方法**
- 也**不需要**访问**类属性** 或者调用**类方法**
**
- 这个时候,可以把这个方法封装成一个**静态方法**
<a name="d6614bdb"></a>
## 5.1 语法如下:
```python
class Tools:
@staticmethod
def do_some():
print("静态方法")
- 静态方法需要修饰器
**@staticmethod**
来标识,告诉解释器这个一个静态方法
**
通过 类名. 调用 静态方法 ```python class Dog(object):
静态方法,既不调用类属性/方法,也不调用实例属性/方法
@staticmethod def run():
print("狗在跑...")
Dog.run() ``` **