python 类属性、静态方法与类方法

1. 类属性

  • 1.1 定义

    • 在类中方法外通过属性名 = 属性值定义的属性
    • 访问方式:
      • 类名.属性名
      • 对象名.属性名

        class Student:
            cls_id = 102
        
        stu = Student()
        print(Student.cls_id)
        print(stu.cls_id)
        
        print("---------")
        
        Student.cls_id = 103
        print(Student.cls_id)
        print(stu.cls_id)
        
        print("---------")
        
        stu.cls_id = 104
        print(Student.cls_id)
        print(stu.cls_id)
        

        运行结果:

        102
        102
        ---------
        103
        103
        ---------
        103
        104
  • 1.2 对象属性与类属性的区别
    • (1)内存中存在数量不同

      • 对象属性:创建了多少个对象,内存中就有多少份
      • 类属性:内存中只存在类中只存在一份,但是对象可读取
    • (2)定义位置不同
      • 对象属性:定义在类内方法内
      • 类属性:定义在类内方法外
    • (3)访问方式不同
      • 对象属性:对象名.属性名
      • 类属性:类名.属性名
        • 读取类属性时,可以通过对象名.属性名
    • (4)生命周期不同
      • 对象属性:创建对象 -> 对象被系统回收
      • 类属性:加载全局命名空间 -> 程序结束
    • (5)所有者不同
      • 对象属性:属于对象
      • 类属性:属于类

2. 静态方法

  • 概念:类中的一个方法
  • 格式:在方法上面添加@staticmethod
  • 参数:可以有参数,也可以没有参数
  • 应用场景:一般用于和类对象以及实例对象无关的代码
  • 使用方式:
    • (1)类名.类方法名
    • (2)对象名.类方法名
  • 使用场景示例:
    • 如:学生管理系统的展示主菜单

3. 类方法

  • 概念:无需实例化就可以通过类直接调用的方法
  • 格式:在方法上面添加@classmethod
  • 参数:方法的第一个参数接收的一定是类本身
    • 方法的参数为cls也可以是其他名称,但是一般默认为cls
    • cls指向类对象(也就是下边示例中Goods)
  • 应用场景:当一个方法中只涉及到静态属性的时候可以使用类方法(类方法用来修改类属性)
  • 使用方式:
    • (1)对象名.类方法名
    • (2)类名.类方法名
  • 使用场景示例:
    • 修改所有商品的折扣

      class Goods():
          discount = 1
          def __init__(self,price,name):
              self.name = name
              self.price = price
          def price_discount(self):
              return self.price * Goods.discount
          @classmethod
          def change_discount(cls,new_discount):
              cls.discount = new_discount
      
          goods = Goods(20, "audi")
          print(goods.price_discount())
          Goods.change_discount(0.5)
          print(goods.price_discount())
      
      运行结果:
      20
      10.0
      

        

       

原文地址:https://www.cnblogs.com/songdanlee/p/11367584.html

时间: 2024-10-24 22:36:44

python 类属性、静态方法与类方法的相关文章

python类的静态方法和类方法区别

# python类的静态方法和类方法区别 ## 先看语法,python 类语法中有三种方法,实例方法,静态方法,类方法. 本文由黄哥python培训黄哥所写. # coding:utf-8 class Foo(object): """类三种方法语法形式""" def instance_method(self): print("是类{}的实例方法,只能被实例对象调用".format(Foo)) @staticmethod def

Python类属性和类方法

01. 类的结构 1.1 术语 —— 实例 使用面相对象开发,第 1 步 是设计 类 使用 类名() 创建对象,创建对象 的动作有两步: 1) 在内存中为对象 分配空间 2) 调用初始化方法 __init__ 为 对象初始化 对象创建后,内存 中就有了一个对象的 实实在在 的存在 —— 实例 因此,通常也会把: 创建出来的 对象 叫做 类 的 实例 创建对象的 动作 叫做 实例化 对象的属性 叫做 实例属性 对象调用的方法 叫做 实例方法 在程序执行时: 对象各自拥有自己的 实例属性 调用对象方

python中的静态方法和类方法

静态方法独立于类和类的实例,它是定义在类作用域内的方法.可以由类和实例直接调用. 类方法和静态方法都要使用装饰器来定义,定义的基本格式是: @staticmethod def <function name>(): #do something 类方法定义的基本格式是: @ classmethod def <function name>(cls): #do something 类方法与成员方法不同的是,它需要传入参数cls,cls代表类. class Myclass(): x='cla

python基础学习——静态方法、类方法

最近温故了一下 python 基础知识,有新的理解,整理在此,以便以后查阅或纠正. 本文描述一下静态方法和类方法,引出装饰器的概念,在下一篇博文中记录. 先举例,看效果: 1 class MyClass: 2 def smeth(): 3 print('This is a static method') 4 smeth = staticmethod(smeth) 5 6 def cmeth(cls): 7 print('This is a class method of', cls) 8 cme

Python类属性访问的魔法方法

Python类属性访问的魔法方法: 1. __getattr__(self, name)- 定义当用户试图获取一个不存在的属性时的行为 2. __getattribute__(self, name)- 定义当该类的属性被访问时的行为 注意:当__getattr__与__getattribute__同时重写时,访问属性时,优先调用__getattribute__,只有当被访问的属性不存在时才触发__getattr__ 3. __setattr__(self, name, value)- 定义当一个

python 类属性 实例属性 类方法 实例方法 静态方法(转载)

本文是转载,纯粹是为了方便后面自己查看,建议还是看原文的:http://www.cnblogs.com/dolphin0520/archive/2013/03/29/2986924.html 一.先来谈一下类属性和实例属性 在前面的例子中我们接触到的就是类属性,顾名思义,类属性就是类对象所拥有的属性,它被所有类对象的实例对象所共有,在内存中只存在一个副本,这个和C++中类的静态成员变量有点类似.对于公有的类属性,在类外可以通过类对象和实例对象访问. class people: name = 'j

python——实例方法、静态方法、类方法、类变量和实例变量浅析

概述: 实例方法就是类的实例能够使用的方法. 静态方法是一种普通函数,就位于类定义的命名空间中,它不会对任何实例类型进行操作.使用装饰器@staticmethod定义静态方法.类对象和实例都可调用静态方法. 类方法是将类本身作为对象进行操作的方法.类方法使用@classmethod装饰器定义,其第一个参数是类,约定写为cls.类对象和实例都可以调用类方法. super用来执行父类中的函数. 类变量定义在类的定义之后,实例变量则是以为self.开头. 如何调用父类的构造函数:子类(派生类)并不会自

Python面向对象之静态方法和类方法

常规的类定义中,所有函数都被假定在实例上操作,该实例总是作为第一个参数self传递.但还有可以定义两种常见的方法. 静态方法是一种普通函数,它不会对任何实例类型进行操作.使用@staticmethod装饰器来定义静态方法: 1: class Foo(object): 2: @staticmethod 3: def add(x, y): 4: return x + y 5: 6: x = Foo.add(3, 4) 类方法是将类本身作为对象进行操作的方法.使用@classmethod装饰器来定义类

Python类属性详解

在python开发中,我们常常用到python的类,今天就通过实例和大家扒一扒类的属性,一起来看看吧. 类属性 1.类定义后就存在,而且不需要实例化 2.类属性使得相同类的不同实例共同持有相同变量 类属性实例 attrb.py class TestCss: cssa = 'class-attribe' def __init__(self): self.a = 0 self.b = 10 def info(self): print('a:',self.a,'b:',self.b,'cssa:',T