1.方法相关
1.1方法概念:描述一个目标的行为动作:比如描述一个人怎样吃、怎样喝、怎样玩儿......
和函数十分类似,都封装了一些列行为动作。都可以被调用之后,执行一系列行为。最主要的区别就是:调用方式。
#函数的创建与调用 def eat(): print(1) print(2) print(3) eat() #方法的创建与调用 class Person: def eat2(self): print(1) print(2) print(3) p = Person() p.eat2()
1.2方法的划分
实例方法:默认第一个参数需要接收到一个实例。
类方法:默认第一个参数需要接收到一个类。
静态方法:静静的看着前面装逼,第一个参数啥也不默认接收。
注意:(1)划分依据:方法的第一个参数必须要接收的数据类型。
(2)不管是哪一种类型的方法,都是存储在类当中。没有在实例当中的。
(3)不同类型的方法的调用方式不同。
class Person: def eat2(self): print("这是一个实例方法", self) @classmethod def leifangfa(cls): print("这是一个类方法", cls) @staticmethod def jingtaifangfa(): print("这是一个静态方法") p = Person() p.eat2() p.leifangfa() p.jingtaifangfa()
使用:(1)语法
(2)不同类型的方法的规则
(3)不同类型方法的调用
(4)根据不同的问题,自己决定,到底该设计怎样的方法来解决问题。
1.3实例方法
语法:class Person:
def run(self):
pass
标准调用:根据实例调用方法:不用手动传,解释器会自动把调用对象本身传递过去。
注意:如果实例方法没有接收任何参数,则会报错。一个自传,一个不接收。
class Person: def eat(self, food,): print("在吃饭", food) p = Person() # 标准调用 p.eat("土豆")
其他调用:使用类调用
间接调用
本质就是直接找到函数本身来调用。
1.4类方法
class Person: @classmethod def leifangfa(cls, a): print("这是一个类方法", cls, a) Person.leifangfa(123) p = Person() p.leifangfa(666) func = Person.leifangfa func(111) # 装饰器的作用,在保证原本函数不改变的情况下,直接给这个函数增加一些功能。 # 延伸类 class A(Person): pass A.leifangfa(909090)
1.5静态方法
#-----------------------------------------------静态方法------------------------------------------------------------------ class Person: @staticmethod def jingtaifangfa(): print("这是一个静态方法") Person.jingtaifangfa() p = Person() p.jingtaifangfa() func = Person.jingtaifangfa func()
1.6补充
class Person: age = 0 def shilifangfa(self): print(self, "实例方法") print(self.age) print(self.num) @classmethod def leifangfa(cls): print(cls, "类方法") print(cls.age) @staticmethod def jingtaifangfa(): print("静态方法") p = Person() p.num = 10 p.shilifangfa() p.leifangfa() # # 类属性 # print(Person.age) # p.age # # # 实例属性 # # print(p.num)