python类的实例方法、静态方法和类方法区别及其应用场景
参考廖雪峰python3
首先记住: 面向对象的三大特点是 数据封装、继承和多态
面向对象编程oop,就是把对象作为程序的基本单元,一个对象中包含了数据和操作数据的函数
而我们平时写的python程序,很多是面向过程的,也会是执行算法的流程吧
举例子:
假设我们要处理学生的成绩表,为了表示一个学生的成绩,面向过程的程序可以用一个dict表示:
std1 = {"name":"ivy","score":98}
std2 = {"name":"bob","score":88}
如果想打印学生的成绩:
def print_score(std):
print("%s: %s"%(std["name"],std["score"]))
换个角度,采用面向对象的程序设计思想,则思考的并不是程序的执行流程了,而学生student这个数据类型应该被视作一个对象,这个对象拥有name和score两个属性(property)。
class Student(object):
def __init__(self,name,score):
### 初始化,固定的操作;name和score是对象Student的属性
self.name = name
self.score = score
def print_score(self):
### 定义方法
print("%s:%s"%(self.name,self.score))
具体的

面向对象的设计思想是抽象出Class,根据Class创建Instance
具体书写形式
class Student(object):
pass
class后直接跟类名,通常大写字母开头,紧接着是object(表示该类是从哪个类继承下来的)
通常,没有合适的继承类,就用object类,适合所有类最终都会被继承的类
实例化是通过类名()实现
ivy = Student()
每个实例都可以绑定属性
ivy.name="ivy" ivy.score = 99
这个属性的实现是通过__init__方法
class Student(object):
"""类 class 是抽象概念"""
def __init__(self,name,score):
### 初始化,固定的操作;name和score是对象Student的属性
self.name = name
self.score = score
__init__方法的第一个参数永远是self,表示创建的实例本身,因此,在__Init__方法内部,就可以将各种属性绑定到self,因为self就指向创建的实例本身。
意思是有了__init__方法,在创建实例中,不能传入空参数。self不需要传,python解释器会把实例变量传进去。
普通实例方法,第一个参数需要是self,它表示一个具体的实例本身。
静态方法
如果用了装饰器@staticmethod,那么就可以无视这个self,而将这个方法当成一个普通的函数使用。
类方法
而对于装饰器@classmethod,它的第一个参数不是self,是cls,它表示这个类本身。


浙公网安备 33010602011771号