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,它表示这个类本身。

 

posted @ 2019-07-26 23:02  lililili——  阅读(1106)  评论(0)    收藏  举报