函数和方法
一 函数的定义
- 使用def关键字定义的函数
- 调用时有几个参数就传几个参数,不能多也不能少;传参有关键字传参和位置传参
二 方法的定义
定义在类内部,调用的时候可以自动传参的函数称之为方法
三 方法的分类(绑定给谁,就由谁来调用)
1. 对象方法:绑定给对象的方法
- 绑定给对象的方法由对象调用,自动会把对象传入
- 类也可以调用对象的方法,如果类来调用,就变成了普通函数,有几个参数就要传几个值
class Person:
def printName(self):
print(self.name)
p = Person()
p.name = 'rachel'
p.printName() # Rachel **对象调用printName ,printName就是方法 会自动传值**
Person.printName(p) # Rachel 类来调用printName,printName就是函数,有几个值就要传几个值
2. 类方法:绑定给类的方法
- 绑定给类的方法由类调用,会自动把类传入
- 对象也可以调用类的方法,直接调用,内部会把对象的类拿到,自动传入
class Person:
@classmethod
def test(cls):
print(cls.__name__)
p = Person()
Person.test() # Person
p.test() # Person
- 静态方法 就变成了普通函数,类和对象调用时有几个值传几个值
class Person:
@staticmethod
def test(cls):
print(cls.__name__)
p = Person()
Person.test(Person) # Person
p.test(Person) # Person
四 处理函数和方法的类型
- 一切皆对象,函数也是个对象, 由某个类产生-----> FunctionType
- isinstance() 是 Python 内置函数之一,用于检查一个对象是否是指定类型或类的实例
语法是:
isinstance(obj, classinfo)
obj 是要检查的对象,classinfo 是要检查的类型或类
from types import MethodType, FunctionType
def add():
pass
print(isinstance(add, FunctionType)) # True 判断一个对象是不是这个类的对象
print(isinstance(add, MethodType)) # False 判断一个对象是不是这个类的对象
class Foo:
def run(self):
pass
@classmethod
def xx(cls):
pass
@staticmethod
def zz():
pass
# 对象调用 run ,run就是方法 会自动传值
f=Foo()
print(isinstance(f.run,FunctionType)) # False
print(isinstance(f.run,MethodType)) # True
# 类来调用run,run就是函数,有几个值就要传几个值
print(isinstance(Foo.run,FunctionType)) # True
print(isinstance(Foo.run,MethodType)) # False
# 类调用类的绑定方法---》就是方法
print(isinstance(Foo.xx,FunctionType)) # False
print(isinstance(Foo.xx,MethodType)) # True
# 对象调用类的绑定方法---》 也是方法
print(isinstance(f.xx,FunctionType)) # False
print(isinstance(f.xx,MethodType)) # True
# 对象来调用
print(isinstance(f.zz,FunctionType)) # True
print(isinstance(f.zz,MethodType)) # False
# 类来调用
print(isinstance(Foo.zz,FunctionType)) # True
print(isinstance(Foo.zz,MethodType)) #False