Python的类方法,静态方法,实例方法的区别

Python的方法并不想C#,Java这些编译性语言那样严格的区分静态方法和实例方法。也就是说Python的静态方法,类方法和实例方法只是在调用上有区别,类型和实例都可以调用。一般规则如下:
A:实例方法:没有@classmethod和@staticmethod标记的方法是实例方法。假设这个有n个比传参数,类型调用的时候需要给n个参数传参。而实例调用时则只能传n-1个参数,因为第一个参数被系统默认传递了实例本身;因为有这个规定,所以实例方法如果没有参数,则实例是无法调用的,但类型可以调用.
B:类方法:也叫类型方法,用@classmethod做标记的方法.假设其有n个必传参数,如果是类调用,则需要传n-1个参数,第一个参数同样是内定的类型本身。如果是实例调用,则需要传n个参数。类方法要让类型能调用,当然也需要至少一个参数.
C:静态方法:@staticmethod标记的方法。类和实例都可以调用。无内定的参数问题,方法有多少参数就必须传递多少参数。
当然,这里的参数忽略了缺省的参数。这对理解没多大的问题。下面是代码示例,大家可以调用测试。

Python也没有重载(overload,不是重写override)一说.??

class ObjOpt:
    def __init__(self):
        self.Name=‘abc‘
        self.CCC=123
    #实例方法   
    def ClassMethodFx3(ad,abc):
        return dir(ad)
    #实例方法,实例和类都可以调用,但类调用需要传递n个参数,
    #实例调用只能传n-1个参数,第一个参数默认为实例本身.
    def ClassMethodFx1(cls,abc):
        return dir(cls)

#类方法,实例和类都可以调用,第一个参数默认是类型.
    #调用时第一个参数忽略,只需要传n-1个参数
    #cls不是关键字
    @classmethod
    def ClassMethodFx21(cls,abc):
        return dir(cls)
   
    #类方法,实例和类都可以调用,第一个参数默认是类型.
    #调用时第一个参数忽略,只需要传n-1个参数
    @classmethod
    def ClassMethodFx22(bbb,abc):
        return dir(bbb)
    #静态方法,用实例和类都可以调用,但不会给默认参数.需要传n个参数.
    @staticmethod
    def GetStaticMethod(cls,obj):
        return dir(cls)
    #实例方法
    def GetProperties(self,obj):
        theAttrs = dir(obj)
        theRetAttrs = []
        for attr in theAttrs:
            bb=attr.startswith(‘__‘)
            if bb==False:
                theRetAttrs.append(attr)
        return theRetAttrs;
    name=‘abcd‘

??

时间: 2024-10-10 13:30:27

Python的类方法,静态方法,实例方法的区别的相关文章

Object-c 类方法和实例方法的区别和联系

在我学习oc的时候,总是搞不懂什么时候用类方法,什么时候使用实例方法.于是做了如下总结. -表示实例方法: 用实例方法访问 +表示类方法:类方法的对象时类不是实例.多用于创建对象或工具类 什么时候使用类方法,要创建一个实例时候获取一个共享实例,或者获取关于类的一些共有信息. 1.类方法是属于整个类,而不属于某个对象. 2.类方法只能访问类成员变量,不能访问实例变量,而实例方法可以访问类成员变量和实例变量. 3.类方法的调用可以通过类名.类方法和对象.类方法,而实例方法只能通过对象.实例方法访问.

Python的实例方法,类方法,静态方法之间的区别及调用关系

如果只看这个图,很多人可能会看的一头雾水,特别是学过完全面向对象语言的同学, Python 是双面向的,既可以面向函数编程,也可以面向对象编程,所谓面向函数就是单独一个. py 文件,里面没有类,全是一些函数,调用的时候导入模块,通过模块名.函数名()即可调用,完全不需要类,那么你可能会问,那要类还有什么毛用? 类就是用来面向对象编程啦,类可以有自己的属性,类可以创建很多实例,每个实例可以有不同的属性,这也就保存了很多私有的数据,总之都有存在的必要. 再来看上面这张图,在类里面定义的函数就是方法

【Effective Python】类方法、实例方法、静态方法

Python中至少有三种比较常见的方法类型,即实例方法,类方法.静态方法.它们是如何定义的呢?如何调用的呢?它们又有何区别和作用呢?且看下文. 首先,这三种方法都定义在类中.下面我先简单说一下怎么定义和调用的.(PS:实例对象的权限最大.) 实例方法 定义:第一个参数必须是实例对象,该参数名一般约定为“self”,通过它来传递实例的属性和方法(也可以传类的属性和方法): 调用:只能由实例对象调用. 类方法 定义:使用装饰器@classmethod.第一个参数必须是当前类对象,该参数名一般约定为“

类方法与实例方法的区别

1. +与- 2. 实例方法需要实例一个对象,通过这个对象来调用相应的实例方法:类方法直接通过类名调用 3. 类方法中可以直接调用类方法,不可以直接调用实例化方法,需要创建一个对象,通过对象调用相应地方法 实例化方法可以直接调用实例方法,也可以调用类方法 4. 类方法不可以使用实例变量,可以使用self,因为self不是实例变量 5. 在类方法中self相当于class,在实例化方法中self和super一样,标注对象首地址 6. 类方法的对象不需要手动释放,会被放到自动释放池中 and so

Java中的类变量、实例变量、类方法、实例方法的区别

类变量:形如static int a; 顾名思义,类变量可以理解为类的变量,类变量在类加载的时候就已经给它分配了内存空间,不同于实例变量(int a; ),实例变量是在该类创建对象的时候分配内存的.并且,每创建一个对象,就会为该实例变量分配相应的内存空间,而类变量它不属于任何一个对象,它为所有对象所共享,所有对象的类变量占用相同的一处内存空间.调用类变量过程中,可以用 类名.类变量 也可以 对象名.类变量 来调用.类变量同于C/C++中接触的static变量,有记忆功能. 类方法:static 

python3类方法,实例方法和静态方法

今天简单总结下python的类方法,实例方法,静态方法. python默认都是实例方法,也就是说,只能实例对象才能调用这个方法. 那是不是说类方法也只能被类对象本身来调用呢,当然,不是.类方法既可以被类对象调用,也可以被实例对象调用.你可以这样理解,假设我现在定义的是'dog狗',它有一个类方法'啃骨头',那么对于所有的狗是不是都可以调用啃骨头这个方法,既然这样,我现在创建一个'旺财'实例,它也同样可以去啃骨头,也就是能调用这个类方法. 静态方法你可以理解为参数可以随意设置的方法,类对象和实例对

IOS类方法,实例方法

从昨天开始准备从Objective-C Programming: The Big Nerd Ranch Guide这本书入手,从头扎实地学习一下OC,顺便提高一下英文阅读能力. 今天的知识重点在于类方法和实例方法的区别: NSDate *now = [NSDate date]; We say that the date method is a class method. That is, you cause the method to execute by sending a message t

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

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

python中静态方法、类方法、属性方法区别

在python中,静态方法.类方法.属性方法,刚接触对于它们之间的区别确实让人疑惑. 类方法(@classmethod) 是一个函数修饰符,表是该函数是一个类方法 类方法第一个参数是cls,而实例方法第一个参数是self(表示该类的一个实例) 类中普通函数至少要一个self参数,代表类对象实例 类方法至少需要一个cls参数,通过cls可以获取到类本身的属性方法等元信息.当有个子类继承时,传入的是子类对象. 对于类方法两种调用方式,类.func(),类实例.func() 静态方法(@staticm