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

class ClassName: 
    def method(self)# self参数指向实例化对象
        pass

    @classmethod
    def classmethod(cls): 
        # cls参数指向classname类对象
        pass

    @staticmethod
    def staticmethod():
        # 无须  `cls`或`self`这类固定参数
        # 但不是说没有,只是定义的参数无特殊的指定对象,参数为普通的参数
        pass

实例方法

格式:第一个参数为实例对象,参数名一般约定为selfself参数代表的是当前类的实例后的实例化对象
参数self指向实例化后的对象,通过参数self来传递实例化对象的属性和方法
调用:只能由实例对象调用,故调用前必须先实例化,然后通过实例对象调用

例如:
先实例化类
myclass = ClassName()
然后 通过对象myclass调用
myclass.method()其中methodself指向刚实例化的myclass对象
不可以直接通过ClassName.method()访问 ,会报错

实例完整代码
class ClassName:
    name = 'name'

    def method(self):
        self.name = 'method'
        print(self.name)


myclass = ClassName()
print(myclass.name)
myclass.method()
print(myclass.name)

输出结果为:
name
method
method

类方法

定义:使用修饰器@classmethod修饰后的函数第一个参数必须是当前类对象。该参数名一般约定为cls
cls指向类本身,不能通过它访问实例化对象的方法和对象,只能访问类的静态方法和静态属性。
通过它来传递的属性和方法(不能传实例化对象的属性和方法);
调用:实例对象和类对象都可以调用,无差别,但两种调用方式类方法访问的都是类的属性和方法

例如:
实例化后可以myclass.classmethod()又或者可以直接类名调用ClassName.classmethod()输出结果都一样

实例及完整代码
class ClassName:
    name = 'name'

    def __init__(self):
    	# 实例化后的name
        self.name = 'Bile'
 
    @classmethod
    def classmethod(cls):
        print(cls.name)
        pass
myclass = ClassName()
myclass.classmethod()
ClassName.classmethod()

结果都是:name
print(myclass.name) 输出的则是Bile

静态方法

定义: 使用装饰器@staticmethod参数随意,不需要selfcls参数,可以有,但并不是类方法和实例方法的selfcls有实际指定的对象,只是一个普通的参数,无特殊意义
调用:实例对象和类对象都可以调用,无差别。但不能访问类或者实例的属性和方法(因为没有clsself参数)

一般都是直接通过类名来调用,不实例化,与函数类似。一般少用静态方法

class ClassName:
    name = 'name'

    def __init__(self):
        # 实例化后的name
        self.name = 'Bile'

    def method(self):
        self.name = 'method'
        print(self.name)

    @classmethod
    def classmethod(cls):
        print(cls.name)
        pass

    @staticmethod
    def staticmethod(param='static'):
        print('this is ', param)


ClassName.staticmethod()
ClassName.staticmethod('static method')

输出:
this is static
this is static method

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值