首页
学习
活动
专区
圈层
工具
发布

python中类的静态方法和类的类方法

知识回顾: 上一节中,我们深化学习了类的属性监控,主要使用了三个魔法方法: __getattr__ __setattr__ __delattr__ 与此同时在书写属性设置监控的时候,千万不要忘记写__...设置类的属性 4.通过查看类的属性的值,来看属性监控是否成功 二、类的静态方法 在类中的方法名称前加一个头标记@staticmethod。...静态方法往往用于一些自定义的类来实现一些通用的功能,可以方便我们调用类的方法。 类的静态方法,不需要self这类参数,因为类的静态方法,不需要进行实例化,就可以进行调用。...三、类的类方法 在类中的方法名称前加一个头标记@classmethod。 类的类方法的调用也不需要进行实例化。 类的类方法是在python中对类的构造方法的一个补充。...name="test类方法" print(name) 调用: Person.setName() 类的静态方法和类方法的区别主要是在方法定义的时候的头标记不同。

4.5K20

python中的静态方法和类方法

静态方法和类方法在python2.2中被引用,经典类和新式类都可以使用。同时,一对内建函数:staticmethod和classmethod被引入,用来转化类中某一方法为这两种方法之一。...静态方法: 静态方法是类中的函数,不需要实例。静态方法主要是用来存放逻辑性的代码,主要是一些逻辑属于类,但是和类本身没有交互,即在静态方法中,不会涉及到类中的方法和属性的操作。...可以理解为将静态方法存在此类的名称空间中。事实上,在python引入静态方法之前,通常是在全局名称空间中创建函数。 例子: 譬如,我想定义一个关于时间操作的类,其中有一个获得当前时间的函数。...类函数可以通过类名以及实例两种方法调用! 注意: python2 中,必须总要把一个方法声明为静态的,从而能够不带一个实例而调用它。...python3 中,如果方法只通过类调用,而不需要通过实例调用的话,不用非要声明为静态的。 #!

2.1K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Python中类的静态方法、类方法及实例方法

    概述 在Python的类中,有着类属性、实例属性,静态方法、类方法、实例方法的区别。到底有什么不一样呢?接下来我们就一探究竟。...类对象派生实例对象 由上图可以看出: 类属性在内存中只保存一份 实例属性在每个对象中都要保存一份 还是以上面的例子在 ipython 中对类属性的修改进行测验 In [24]: class Student...实例方法:由对象调用,至少一个 self 参数;执行实例方法时,自动将调用该方法的对象赋值给 self。 类方法:由类调用,至少一个 cls 参数;执行类方法时,自动将调用该方法的类赋值给 cls。...类对象不能直接调用实例方法,类、静态方法可以。 self与cls的区别 self 指的是类实例对象本身(注意:不是类本身)。...使用场景 需要操作类属性的定义成类方法。 需要操作实例属性的定义成实例方法。 既不需要操作类属性,也不需要操作实例属性就定义成静态方法。

    4.1K10

    Python中类的静态方法、类方法及实例方法

    概述 在Python的类中,有着类属性、实例属性,静态方法、类方法、实例方法的区别。到底有什么不一样呢?接下来我们就一探究竟。...存储方式如下图 [类对象派生实例对象] 由上图可以看出: 类属性在内存中只保存一份 实例属性在每个对象中都要保存一份 还是以上面的例子在 ipython 中对类属性的修改进行测验 In [24]: class...实例方法:由对象调用,至少一个 self 参数;执行实例方法时,自动将调用该方法的对象赋值给 self。 类方法:由类调用,至少一个 cls 参数;执行类方法时,自动将调用该方法的类赋值给 cls。...类对象不能直接调用实例方法,类、静态方法可以。 self与cls的区别 self 指的是类实例对象本身(注意:不是类本身)。...使用场景 需要操作类属性的定义成类方法。 需要操作实例属性的定义成实例方法。 既不需要操作类属性,也不需要操作实例属性就定义成静态方法。

    4.1K00

    Python类中的方法要加self的理由

    Python类中的self到底是干啥的首先明确的是self只有在类的方法中才会有,独立的函数或方法是不必带有self的。self在定义类的方法时是必须有的,虽然在调用时不必传入相应的参数。...self名称不是必须的,在python中self不是关键词,你可以定义成a或b或其它名字都可以,但是约定成俗(为了和其他编程语言统一,减少理解难度),不要搞另类,大家会不明白的。...name is:',self.namep=Person('Bill')print p在上述例子中,self指向Person的实例p。...为什么不是指向类本身呢,如下例子:class Person: def _init_(self,name): self.name=name def sayhello(self):...总结self在定义时需要定义,但是在调用时会自动传入。self的名字并不是规定死的,但是最好还是按照约定是用selfself总是指调用时的类的实例。

    2K20

    Python中的静态方法、实例方法、类方法的区别

    实例方法 定义:第一个参数必须是实例对象,该参数名一般约定为“self”,通过它来传递实例的属性和方法(也可以传类的属性和方法); 调用:只能由实例对象调用。...类方法 定义:使用装饰器@classmethod。第一个参数必须是当前类对象,该参数名一般约定为“cls”,通过它来传递类的属性和方法(不能传实例的属性和方法); 调用:实例对象和类对象都可以调用。...静态方法 定义:使用装饰器@staticmethod。参数随意,没有“self”和“cls”参数,但是方法体中不能使用类或实例的任何属性和方法; 调用:实例对象和类对象都可以调用。...(self.name)) # 定义一个类方法,有cls参数 @classmethod def shou_tool_count(cls): print("工具对象的数量...,其实实例对象和类对象都可以调用 Tool.shou_tool_count() # 调用实例方法,只能由实例对象调用 tool.action() # 调用静态方法,实例对象和类对象均可调用 too2

    2K20

    实例方法,类方法和静态方法的区别_python中类的所有实例方法

    只能由实例调用 类方法 使用装饰器@classmethod,第一个参数可以是”cls”,也可以是”self”,通过它传递类的属性和方法。...最后,我想定义一些学生,然后获得班级中的总人数 这个问题用类方法做比较合适,因为我实例化的时学生,但是如果我从学生这一个实例中获得班级总人数是不合理的,同时,如果想要获得班级总人数,如果生成一个班级的实例也是没有必要的...静态方法主要用来存放逻辑性的代码,逻辑上属于类,但是和类本身没有交互,也就是说在静态方法中,不会涉及到类中的属性和方法的操作。...可以理解为,静态方法是独立的,单纯的函数,它仅仅托管于某个类的名称空间中,便于使用和维护。...我们可以在类外面写一个简单的方法来做这些,但是这样做就扩散了类代码的关系到类定义的外面,这样写就会导致以后代码维护的困难 参考文章 《python中的静态方法和类方法》 《python中类方法,实例方法

    3K40

    Python中的实例方法、类方法、静态方法与魔法方法

    本文翻译自我的英文博客,最新修订内容可随时参考:Python中的实例方法、类方法、静态方法与魔法方法 在Python中,方法的类型决定了其与类、实例的交互方式。...本文将详细解析实例方法(Instance Method)、类方法(Class Method)、静态方法(Static Method)的区别,并介绍特殊的魔法方法(Magic Method和私有方法。...一、实例方法(Instance Method) 定义:最常见的方法,默认以 self 为第一个参数,self 指向类的实例。 调用方式:只能通过类的实例调用。...特点: 无需手动调用,在特定事件触发时自动执行(如创建实例、打印对象)。 允许自定义类的运算符行为、迭代逻辑等。 常见魔法方法 初始化与构造: __init__(self, ...)...需要操作类状态(如修改类变量)→ 类方法。 逻辑上属于类,但无需访问状态 → 静态方法。 魔法方法的使用场景: 自定义容器类时重载 __getitem__、__len__ 等方法。

    39610

    【从零学习python 】45.Python中的类方法和静态方法

    类方法、静态方法 类方法 类方法是以类对象作为第一个参数的方法。需要使用装饰器@classmethod来标识其为类方法。对于类方法,第一个参数必须是类对象,一般以cls作为第一个参数。...__type 使用场景: 当方法中需要使用类对象(如访问私有类属性等)时,定义类方法。 类方法一般和类属性配合使用。...静态方法 静态方法通过装饰器@staticmethod来修饰,静态方法既不需要传递类对象也不需要传递实例对象(形参没有self/cls)。静态方法也可以通过实例对象和类对象去访问。...使用场景 当方法既不需要使用实例对象(如实例对象,实例属性),也不需要使用类对象(如类属性、类方法、创建实例等)时,定义静态方法。 取消不需要的参数传递,有利于减少不必要的内存占用和性能消耗。...注意点: 当类中定义了同名的方法时,调用方法会执行最后定义的方法。

    46010

    Python中通过对象不能调用类方法和静态方法的解析

    一、类方法和静态方法的定义在了解Python中通过对象不能调用类方法和静态方法之前,首先需要明确类方法和静态方法的定义。...类方法和静态方法都是定义在类中的一种方法,可以通过类名直接调用,而不需要先创建该类的实例。...二、对象调用方法的原理在Python中,对象调用方法的原理可以简单概括为:Python通过找到方法所在的类,并将该对象作为第一个参数(通常用self)传入方法中。...3.2 静态方法在静态方法中,不需要传入self或cls,因此,如果我们通过对象调用静态方法,实际上传入的参数是该对象本身,而不是任何类或实例。这就意味着,静态方法无法从其中访问类或实例的属性或方法。...因此,如果在静态方法中尝试访问类或实例的属性或方法,就会出现错误。四、总结Python中的类方法和静态方法是很有用的方法,可以通过类名直接调用而不需要创建实例。

    1.9K30

    Python入门之@classmethod与@staticmethod

    @staticmethod ========================================   Python面向对象编程中,类中定义的方法可以是 @classmethod 装饰的 类方法...就是一个普通工具而已     注意:与绑定到对象方法区分开,在类中直接定义的函数,没有被任何装饰器装饰的,都是绑定到对象的方法,可不是普通函数,对象调用该方法会自动传值,而staticmethod装饰的方法...,对于未绑定方法,调用 A.m1 时必须显示地传入一个实例对象进去,而 a.m1是已经绑定了实例的方法,python隐式地把对象传递给了self参数,所以不再手动传递参数,这是调用实例方法的过程。...A.m1(a, 1) == a.m1(1) #上面的等式左右两边的意义是相同的 如果未绑定的方法 A.m1 不传实例对象给 self 时,就会报参数缺失错误,在 py3 与 py2 中,两者报的错误不一致...A.m2(1) == a.m2(1) # 上面的等式左右两边的意义是相同的 这使得我们可以在实例方法中通过使用 self.m2()这种方式来调用类方法和静态方法。

    1.8K60

    八、python学习笔记-面向对象-类对象

    对象包括两个数据成员(类变量和实例变量)和方法 """类对象 需要知道的是self代指实例,cls代指类,这是python中定义好的规范 变量(字段): 1、实例变量(普通字段):实例变量属于实例...(对象),只在实例(对象)方法被调用 2、类变量(静态字段):类变量属于类,在内存中只保存一份,当一个类中的多个方法使用相同的变量(字段)使类变量,类变量可以被类和实例(对象)调用 方法:...,执行某个功能时需要使用对象中的值,使用实例变量 2、静态方法:不需要任何对象中的值,使用静态方法 3、类方法:如果在使用时用到当前类的话,使用类方法 """ # 示例1、普通方法可以通过类和实例调用...会自动将实例(foo)传递给self # 通过类调用,并未执行构造方法,说明没有创建实例,直接调用bar打印hello # 通过类调用需要传参,因为定义方法时设置了形参self,没有创建实例需要自己传入...') Foo3.bar() # 会自动将类传递给形参cls

    84631

    python粗谈面向对象(二)

    参数随意,没有“self”和“cls”参数这些俗套的东东,如果想要在静态方法中调用类的成员或者对象的成员需要将类或者对象传递给静态方法。实例对象和类对象都可以调用。...实例对象在调用方法时就不需要传递参数,这是因为Python为我们隐式的把实例对象空间地址传给了实例方法,所以实例对象在调用实例方法时不会报错,因为Python已经为我们将参数隐式的传递给了实例方法。...,并且Python为我们将类A隐式的传递给了类方法,而不是将实例对象空间传递给了类方法。...所以我们不能在类方法中使用对象的属性和方法,除非我们将实例对象空间传递给类方法,这就需要在定义类方法时,给类方法在加个形参,然后使用实例对象显式的将对象空间传递给类方法。...【缺点】 一、开销 虽然数量很少,但如果每次对象请求引用时都要检查是否存在类的实例,将仍然需要一些开销。可以通过使用静态初始化解决此问题。

    75030

    封装与扩展性

    __high 对于仍然在使用tell_area接口的人来说,根本无需改动自己的代码,就可以用上新功能 >>> r1.tell_area() 8000 回到顶部 七 静态方法和类方法 通常情况下,在类中定义的所有函数...(注意了,这里说的就是所有,跟self啥的没关系,self也只是一个再普通不过的参数而已)都是对象的绑定方法,对象在调用绑定方法时会自动将自己作为参数传递给方法的第一个参数。...除此之外还有两种常见的方法:静态方法和类方法,二者是为类量身定制的,但是实例非要使用,也不会报错,后续将介绍。...1 静态方法 是一种普通函数,位于类定义的命名空间中,不会对任何实例类型进行操作,python为我们内置了函数staticmethod来把类中的函数定义成静态方法 class Foo: def...f1=Foo() f1.spam(3,3,3) #实例也可以使用,但通常静态方法都是给类用的,实例在使用时丧失了自动传值的机制 ''' 1 2 3 3 3 3

    65530

    可维护的Python代码库的7条规则

    Mypy查看所有源代码文件,检查类型规则是否满足要求。例如,传递给函数的所有参数类型是否与函数签名兼容?对象上调用的方法是否真正定义? Mypy不会运行你的代码,所以它不会捕获所有的运行时bug。...我们看到的是 在基类中引用仅在子类中定义或实现的属性和方法。 重载子类中具有不同的方法。 这种方法有什么问题? 目前还不清楚子类中应该实现什么,不应该实现什么。这只能通过研究父类和一些子类示例来回答。...这就使得改变基类并非易事。反之,基类可能对某些子类限制过多,久而久之,就会产生像上例这样的问题。 那么为什么要做继承呢?我们看到一个方法在几个类中重复,将这个方法分解到一个基类中,这样就完成了!...但是当在 Python 中使用继承时,打破这条规则可能很诱人,也很容易。静态类型检查将引导你采用可接受的架构。 总结 继承本质上并不坏,但在 Python 中,它很容易产生反模式。...尽管如此,长长的输入参数列表仍然难以推理。 用 Python 创建纯函数有两种方法: 在类之外定义。 在类中定义方法为classmethod或staticmethod。

    49130

    python--初始面向对象:类的相关知识,对象的相关知识

    在python中,用变量表示特征,用函数表示技能,因而具有相同特征和技能的一类事物就是‘类’,对象则是这一类事物中具体的一个。...引用动态变量 1 类名.方法名 查看这个方法的内存地址 2 类名.方法名(实参) 调用了这个方法,必须传一个实参,这个实参传给了self 只要是类的方法,必须要传self。...__的方法,并且把实例以参数的形式传递给__init__方法中的self形参 3 执行完__init__方法之后,会将self自动返回给st class Person:     role = 'person...:(推荐使用第二种) 类名.方法名(对象名)  # 那么方法中的self参数就指向这个对象 对象名.方法名()      # 这样写,相当于 方法中的self参数直接指向这个对象 attack是和Person...#类名() : 类名+括号就是实例化一个类,相当于调用了__init__方法                   #括号里传参数,参数不需要传self,其他与init中的形参一一对应

    50020

    Python类三种方法,函数传参,类与实例变量(一)

    ,函数内的引用指向的是可变对象list,指向了列表的内存地址,因此调用并不会改变list内存地址.  2 python中元类  Python中的类也是对象。...__class__ #输出:  3 静态方法(@staticmethod)和类方法(@classmethod)  Python其实有3个方法,即静态方法(staticmethod...和cls.这个self和cls是对实例或者类的绑定  对于一般的函数来说我们可以这么调用foo(x),这个函数就是最常用的,它的工作跟任何东西(类,实例)无关.对于实例方法,我们知道在类里每次定义方法的时候都需要绑定这个实例...(x).注意这里的self和cls可以替换别的参数,但是python的约定是这俩对于静态方法其实和普通的方法一样,不需要对谁进行绑定,唯一的区别是调用的时候需要使用a.static_foo(x)或者A.static_foo....属性  这里p1.name="bbb"是实例调用了类变量,,类似函数传参的问题,p1.name一开始是指向的类变量name="aaa",但是在实例的作用域里把类变量的引用改变了,就变成了一个实例变量,

    78320

    Python小知识点(5)--面向对象部分

    1.Python类中self的来源: 通常函数的执行方式为: 调用函数--》执行函数----》返回该函数的执行结果(得到一个内存地址) Python类中方法却不是这样执行的, 而是在实例化对象的同时也将此时的对象名称传入...在底层是通过----》类.方法(对象名)实现该过程的。最终的实现是谁调用这个方法,谁就把自己传递给该方法。...r.got_shot()======》实质为Role.got_shot(r) 3.在构造函数中初始化:在内存中开辟一块空间,然后将一些值进行存储。...5.在实例中是否可以改类中的类变量??...#先在实例中查找是否有n,没有则去查找类中是否有。 总结:通过试验可以知道 我们通过实例修改类中同名的变量,实质为是在该实例的内存中新增了一个与类变量同名的实例变量。

    60940

    Python3快速入门(六)——Pyth

    Python类维护了一个用于保存类的数据的字典,字典内部Python将私有成员改名为_ClassName + __variable_name,因此在类外通过访问私有变量新的名称可以访问相应的私有变量。...__new__不是一个成员方法,而是一个静态方法。 在Python中,一切皆对象,在新式类中,为了将类型(int,str,float等)和类统一,所有的类都是type类型的对象。...1、派生类定义 Python中类的继承按照父类中的方法是否已实现可分为两种: 实现继承 :指直接继承父类的属性和已定义并实现的的方法; 接口继承 :仅继承父类类的属性和方法名称,子类必须自行实现方法的具体功能代码...如果父类中有相同的方法名,而在子类使用时未显式指定调用的具体赋类的方法,Python会根据继承顺序从左至右搜索查找父类中是否包含方法。...在Python 3.x中无论是否显式指定继承object,所有的类都是新式类,在多继承的情况下,经典类查找父类属性或方法的顺序是深度优先,新式类查找父类属性的顺序是广度优先。

    1.5K20
    领券