4.10. 类(1)

类是比较重要的内容,因为在python中,所有的所有都是对象

4.10.1. 面向对象

面向对象是对现实世界的抽象,以便可以使用人类的思维去思考解决问题,思考一下,你平时是怎么描述一个帅哥呢?

  • 个子很高
  • 身材很好
  • 很有钱,可以买飞机
  • 很浪漫

你能从这几点中分析出来规律吗? 什么样的(很浪漫, 个子很高,身材很好)帅哥,有什么(钱),可以干什么(买飞机),这就是人类的思维去描述一类对象,我们来翻译成代码:

class ShuaiGe(object):

    def __init__(self):
        self.shen_gao = 187
        self.shen_cai = 'very good'
        self.money = 100000000
        self.if_lang_man = True

    def mai_fei_ji(self):
        return "A380"

既然大家很喜欢,那我们就new一个出来:

shuai_ge1 = ShuaiGe()
print(shuai_ge1.mai_fei_ji())

这就是面向对象,类是实例的模版,大家可以看到,面向对象其实很简单的,那与面向过程又有什么区别呢?其实除了语法,差异最大的就是思维,举个例子:我们需要造一个计算器,需要实现计算器,来实现加减乘除,下面我们分别使用面向过程和面向对象来实现

面向过程:

def calc(operation, num1, num2):

    if operation == 'add':
        return num1 + num2
    elif operation == 'sub':
        return num1 - num2
    elif operation == 'mul':
        return num1 * num2
    elif operation == 'div':
        return num1 / num2
    else:
        return 'error, unsupported operation'


calc('add', 1, 2)

面向对象:

class Calc(object):

    def add(self, num1, num2):
        return num1 + num2

    def sub(self, num1, num2):
        return num1 - num2

    def mul(self, num1, num2):
        return num1 * num2

    def mul(self, num1, num2):
        return num1 / num2

calc = Calc()
calc.add(1, 2)

大家体会一下

4.10.2. 编写一个类

先上个例子:

class Student(object):

    def __init__(self, sex, name):
        self.sex = sex
        self.name = name

    def run(self):
        print('i can run !!!')

xiao_sun = Student('boy', 'xiao sun')
print(xiao_sun.sex)
print(xiao_sun.name)
xiao_sun.run()

大家先试着理解一下,下面来分析一下

../_images/定义类.png

self 是指实例对象本身,比如生成对象小明,self 就是小明,生成了对象小李,self 就是小李,self 在实例方法的第一个位置,但对象调用时是不需要传的,至于为什么需要这样写,我们后面再说