方法、函数,静态方法,类方法,实例方法的区别

区别


        方法在类体中定义的函数。如果作为该类实例的一个属性被调用,该方法将获得实例对象作为它的第一个参数(通常称为self)。请参阅函数和嵌套作用域函数向调用者返回某个值的一系列语句。它也可以传递零个或多个参数,这些参数可用于主体的执行。[请参方法]

实例方法

        定义:第一个参数必须是实例对象,该参数名一般约定为“self”,通过它来传递实例的属性和方法(也可以传类的属性和方法);

        调用:只能由实例对象调用。

类方法

        定义:使用装饰器@classmethod。第一个参数必须是当前类对象,该参数名一般约定为“cls”,通过它来传递类的属性和方法(不能传实例的属性和方法);

        调用:类和实例对象都可以调用。类方法是只与类本身有关而与实例无关的方法。通过cls引用的必定是类对象的属性和方法,不能访问实例属性,能够通过实例对象和类对象去访问类方法

静态方法

        定义:使用装饰器@staticmethod。参数随意,没有“self”和“cls”参数,但是方法体中不能使用类或实例的任何属性和方法;

        调用:类和实例对象都可以调用。静态方法中引用类属性的话,必须通过类对象来引用,不能访问实例属性


案例:


下面包含了上述三种方法和未声明的方法

class myW2:
    @staticmethod
    def staticMeth():
        print(1141)
    def selfMeth(self):
        print(111)
    def unDefind():
        print(111)
    @classmethod
    def classMeth(cls):
        myW2.unDefind()
        print(22)
        
    a= myW2()
    print(a.selfMeth)
    print(a.staticMeth)
    print(myW2.staticMeth)
    print(a.classMeth)
    print(a.unDefind)
    print(myW2.unDefind)


         最后输出的unDefind方法信息为啥会不同能,可能是解释器解读调用者来默认决定为什么类型吧。当使用类来调用未定义的方法时,解释器是不会报错的但是pycharm编辑器会提示错语法错误。

再看看idle 执行未定义的方法:

>>> class O():
	def p():
		print(11)

		
>>> O.p()
11
>>> a=O()
>>> a.p()
Traceback (most recent call last):
  File "<pyshell#6>", line 1, in <module>
    a.p()
TypeError: p() takes 0 positional arguments but 1 was given
>>> print(a.p)
<bound method O.p of <__main__.O object at 0x000001EA11D63190>>
>>> print(O.p)
<function O.p at 0x000001EA0FD88A60>

初学者,没看到过这种函数的写法,不知道是不是py不足还是我学漏了,请大佬们指教。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值