1、类是一个特殊的对象

python中 一切皆对象

class A : 定义的类属于
类对象

obj1 = A 属于实例对象

  • 在程序运行时,同样会被加载到内存中去


  • 在python中,是一个特殊的对象, —- 类对象

**

  • 在程序运行时,类 对象在内存中只有一份,使用一个类 可以创建出很多个对象实例

**

  • 除了封装实例 的属性方法外,类对象还可以拥有自己的属性方法

类属性
类方法

  • 通过 类名. 的方式可以访问类的属性,或者调用类的方法
类名.属性 —————》类属性 [该类的所有对象共享通过类名直接访问]
类名.方法名 ————-》类方法(cls) [该类的所有对象共享通过类名直接访问]
类名 ————》init 定义 实例属性
对象名.方法名 ———-》实例方法(self)

2、类属性和实例属性

2.1 概念和使用

类属性就是给类对象中定义的属性

通常用来记录
与这个类相关**的特征

类属性不会用于记录具体对象的特征

在实例方法中给类属性赋值的话 一定要用
类名.类属性** 的方式进行赋值

2.1.1 访问类属性两种方式:

类名.类属性
对象.类属性 【不推荐】

2.1.2 注意:

如果使用 对象.类属性 = 值 赋值语句,只会给对象添加一个属性,而不会影响到类属性的值

2.2 实例需求

定义一个工具类
每件工具都有自己的name
需求—— 知道使用这个类,创建了多少个工具对象?

  1. class Tool(object):
  2. # 计数器 类属性
  3. count = 0
  4. def __init__(self, name):
  5. self.name = name
  6. Tool.count += 1
  7. # 创建工具对象
  8. tool1 = Tool("锤子")
  9. tool2 = Tool("剪刀")
  10. tool3 = Tool("榔头")
  11. print("总共创建了%d个工具" % Tool.count) # 3

3、确定方法类型的套路

  • 实例方法 — 方法内部需要访问 实例属性
    • 实例方法 内部可以使用 类名. 访问类属性


  • 类方法 — 方法内部需要访问 类属性

**

  • 静态方法 — 方法内部 不需要访问 实例属性类属性

4、类方法 (使用类名. 调用)

类方法就是针对类对象定义的方法

类方法内部可以直接访问类属性或者调用其他的类方法

4.1 语法如下

  1. class Test(object):
  2. @classmethod
  3. def do_some(cls):
  4. pass
  • 类方法需要用修饰器 @classmethod 来标识,告诉解释器这是一个类方法
  • 类方法的第一个参数应该是 cls
    • 哪一个类调用的方法,方法内的 cls 就是哪一个类的引用
    • 这个参数和实例方法 的第一个参数 self 类似
    • 提示: 使用其他名称也可以,不过习惯使用 cls
  • 通过类名. 调用类方法,调用方法时,不需要传递 cls 参数
  • 在方法内部

    • 可以通过 cls. 访问类的属性
    • 也可以通过 cls. 调用其他的类方法 ```python class Tools:

      类属性

      count = 0

      def init(self, name): self.name = name Tools.count += 1

      定义类方法,类似静态方法 可以通过类名. 进行访问

      @classmethod def show_tool_num(cls):

      可以通过cls调用类属性

      print(“工具对象的总数为:%d” % cls.count)

tool1 = Tools(“锤子”) tool2 = Tools(“钳子”) tool3 = Tools(“剪刀”)

通过类名调用类方法

Tools.show_tool_num()

  1. <a name="GHY4s"></a>
  2. # 5、静态方法
  3. - 在开发时,如果需要在类中封装一个方法,这个方法:
  4. - 既**不需要**访问**实例属性** 或者调用** 实例方法**
  5. - 也**不需要**访问**类属性** 或者调用**类方法**
  6. **
  7. - 这个时候,可以把这个方法封装成一个**静态方法**
  8. <a name="d6614bdb"></a>
  9. ## 5.1 语法如下:
  10. ```python
  11. class Tools:
  12. @staticmethod
  13. def do_some():
  14. print("静态方法")
  • 静态方法需要修饰器 **@staticmethod** 来标识,告诉解释器这个一个静态方法

**

  • 通过 类名. 调用 静态方法 ```python class Dog(object):

    静态方法,既不调用类属性/方法,也不调用实例属性/方法

    @staticmethod def run():

    1. print("狗在跑...")

Dog.run() ``` **