函数和方法

一 函数的定义

  1. 使用def关键字定义的函数
  2. 调用时有几个参数就传几个参数,不能多也不能少;传参有关键字传参和位置传参

二 方法的定义

定义在类内部,调用的时候可以自动传参的函数称之为方法

三 方法的分类(绑定给谁,就由谁来调用)

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

四 处理函数和方法的类型

  1. 一切皆对象,函数也是个对象, 由某个类产生-----> FunctionType
  2. 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
posted @ 2023-08-31 15:57  瓜瓜不甜  阅读(21)  评论(0编辑  收藏  举报