Python函数的正确用法及其注意事项
简略总结:
- 与类和实例无绑定联系的function都归于函数(function);
- 与类和实例有绑定联系的function都归于办法(method)。
首要摒弃过错认知:并不是类中的调用都叫办法
函数(FunctionType)
函数是封装了一些独立的功用,能够直接调用,能将一些数据(参数)传递进去进行处理,然后回来一些数据(回来值),也能够没有回来值。能够直接在模块中进行界说运用。 一切传递给函数的数据都是显式传递的。
办法(MethodType)
办法和函数相似,相同封装了独立的功用,可是办法是只能依托类或许目标来调用的,表明针对性的操作。
办法中的数据self和cls是隐式传递的,即办法的调用者;
办法能够操作类内部的数据
简略的说,函数在python中独立存在,可直接运用的,而办法是有必要被他人调用才干完成的。
静态办法在外(与类和目标均无关,经过类名和目标名均可被调用,属函数)
在模块中完成的函数只需导入这个模块的这个函数既能够恣意运用了,可是在类中声明的有必要导入这个类之后然后再经过创立实例或许类名来调用。能够说直接在模块中声明的是更遍及广泛性的函数,而在类中声明的办法一般是专归于一类事物特有的
from types import MethodType,FunctionType
class Foo(object):
def __init__(self):
self.name="haiyan"
def func(self):
print(self.name)
obj = Foo()
print(isinstance(obj.func,FunctionType)) #False
print(isinstance(obj.func,MethodType)) #True #阐明这是一个办法
print(isinstance(Foo.func,FunctionType)) #True #阐明这是一个函数。
print(isinstance(Foo.func,MethodType)) #False
是的!比如中很清晰,类目标调用func是办法,类调用func是函数,并且是自己传递参数123!
留意,这只是在 python3 中才有的差异,python2 中悉数称为办法。
最大的差异是参数的传递参数,办法是自动传参self,函数是自动传参
那么今后咱们就能够直接看参数是怎么传递的来判别,
假如还不确认能够打印类型看看
from types import FunctionType,MethodType
print(isinstance(obj.func,MethodType)) ---># True
print(isinstance(Foo.func,FunctionType)) ---># True
外表差异:
差异一所在的方位:函数是直接写文件中而不是class中,办法是只能写在class中。
差异二界说的办法:
1.函数界说的办法 def关键字 然后接函数名 再是括号 括号里边写形参也能够省掉不写形参
def functionName():
"""这儿是函数的注释"""
print("这一块写函数的内容"
2.办法界说的办法 首要办法是界说在类中的其他他大体和函数界说差不多,这儿需求留意的一点便是办法有必要带一个默许参数(相当于this),静态办法在外
class className(super):
def methodName(self):
"""这儿是办法的注释
self相当于this;
"""
print("这儿是办法的内容")
差异三调用的办法:
1.函数的调用:函数的调用是直接写 函数名(函数参数1,函数参数2,......)
def functionName():
print("这是一个函数")
#调用
functionName()
2.办法的调用:办法是经过目标点办法调用的(这儿是指目标办法)
class className:
def method(self):
print("这是一个办法")
#Python学习沟通群:531509025
#调用---------------------
#实例化目标
c=className()
c.method()
python类的实例办法、静态办法和类办法差异及其运用场景
一、先看语法,python 类语法中有三种办法,实例办法,静态办法,类办法。
ps.python中self,cls的差异
一般实例办法,第一个参数需求是self,它表明一个详细的实例自身。
假如用了staticmethod,那么就能够无视这个self,而将这个办法当成一个一般的函数运用。
而关于classmethod,它的第一个参数不是self,是cls,它表明这个类自身。
class Foo(object):
"""类三种办法语法方式"""
def instance_method(self):
print("是类{}的实例办法,只能被实例目标调用".format(Foo))
@staticmethod
def static_method():
print("是静态办法")
@classmethod
def class_method(cls):
print("是类办法")
foo = Foo()
foo.instance_method()
foo.static_method()
foo.class_method()
print('----------------')
Foo.static_method()
Foo.class_method()
运转成果如下
是类<class '__main__.Foo'>的实例办法,只能被实例目标调用
是静态办法
是类办法
----------------
是静态办法
是类办法
阐明:
实例办法只能被实例目标调用,静态办法(由@staticmethod装修的办法)、类办法(由@classmethod装修的办法),能够被类或类的实例目标调用。
-
实例办法,第一个参数有必要要默许传实例目标,一般习惯用self。
静态办法,参数没有要求。 -
类办法,第一个参数有必要要默许传类,一般习惯用cls。