函数

def test(a,b)
    print(a,b)
    print('test')
    
# 有几个参数,就传几个参数
test(1,2)

方法

# 定义在类当中有特殊含义的,会自动传值的
class Person(objact):
    
    # 1.没有任何装饰器装饰,绑定给对象的方法
    # 特殊之处,对象来调用,会自动传值,把对象当作第一个参数传进来
    def print_name(self):
        print(self.name)
        
    # 2.绑定给类的方法
    # 特殊之处:类来调用,会自动传值,把类当作第一个参数传经来
    @classmethod
    def test1(cls):
        print('类方法')
        
    # 静态方法
    @staticmethod 
    def test2():  # 有几个参数,传几个参数,严格意义不能叫方法
        print('静态方法')

# 绑定给对象的方法和静态方法
p = Person()
# p = Person(name = 'richer') 这里是name是写不进去的,因为没有写init,父类有init,但没有东西
p.name = 'richer'  
p.print_name()
p.test2()

# 绑定给类的方法和静态方法
Person.test1()
Person.test2()

# 邦定给类的方法,对象可以调用,也会自动把类传入
p = Person()
p.test2()

# 绑定给对象的方法,类可以调用,但是方法变成了普通函数,有几个值,就传几个值
p = Person()
p.name = 'richer'  # 不定义name报错 name 'p' is not defined
Person.print_name(p) # 不传p,报错print_name() missing 1 required positional argument: 'self'

总结

1.方法会自动传值
2.函数有几个参数就得传几个值
3.方法不一定是方法,得看谁来调用,如果是对象的方法,类来调,就变成了普通函数