Python实例方法,类方法,静态方法

class Foo(object):
    def test(self)://定义了实例方法
        print("object")
    @classmethod
    def test2(cls)://定义了类方法
        print("class")
    @staticmethod
    def test3()://定义了静态方法
        print("static")


1、实例方法就是类的实例才能够使用的方法,类无法直接调用。实例方法的两种调用方式:

f=Foo()//实例化类

f.test()//通过实例调用
Foo.test(f)//直接通过类的方式调用,但是需要自己传递实例引用


2、静态方法是一种普通函数,位于类定义的命名空间中,它不会对任何实例类型进行操作。使用装饰器@staticmethod定义静态方法。类对象和实例都可以调用静态方法
类方法的调用方式:

Foo.test2();

如果Foo有子类且子类覆盖了这个类方法,调用Foo2的test2()会调用子类的方法并传递的是子类的类对象。

class Foo2(Foo):
    @classmethod
    def test2(self):
        print(self)
        print("foo2 object")
f2=Foo2()
print(f2.test2())


输出是:<class '__main__.Foo2'>
foo2 object

3、类方法是将类本身作为对象进行操作的方法。类方法使用@classmethod装饰器定义,第一个参数是类,约定写为cls,类对象和实例都可以调用类方法

静态方法的调用方式:
ff.test3()
Foo.test3


归纳如下:
调用方式:
三种方法都可以通过实例来调用
普通方法不能通过类名调用,但是静态方法和类方法是可以的

权限:
静态方法和类方法无法访问实例属性
类方法可以访问类属性,但是静态方法不可以访问类属性

#普通方法,可以通过self访问实例属性
def normalMethod(self,data)
#类方法,可以通过cls访问类属性
@classmethod
def classMethod(cls,data)
#静态方法,不可以访问,通过传值的方式
@staticmethod
def staticMethod(data)
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值