class, objects, inheritance in Python - 简单小代码

和其他语言一样,Python也有class和objects。 看Bucky Roberts的视频感觉Python的class和objects更好理解,下述代码为例:

  • 比如我们有一个Enemy class,就像在游戏里一样,这个class就像是一个模板,Enemy类下有两个function,分别是attack()以及checkLife().

  • 每次我们想call the function的时候,我们需要通过object来实现。每个object就像是一个class的copy (我想到了agent Smith,就好像class AgentSmith, 然后可以创建无数个agentSmith对象来)。 每一个对象都是独立的,我们通过这些个对象来实现它们的function.

#create the class Enemy, this is like a template
class Enemy:
    life = 3

    def attack(self):
        print('Ouch!')
        self.life -= 1

    def checkLife(self):
        print(self.life, 'life left')

#create objects, objects are separate individuals, each is like a copy of the class
enemy1 = Enemy()
enemy2 = Enemy()

enemy1.attack()
enemy1.attack()
enemy1.checkLife()

enemy2.checkLife()
  • 我们创建了enemy1, enemy2这两个独立的对象,同时通过这两个对象实现了功能。运行结果如下,在被attack()两次后,enemy1还有一条命,而enemy2由于没有受到attack(), 还是默认3条命。

这里写图片描述

  • 在class里有一个function叫_ _ init _ _() #左边function的空格请消除
    basically这个function是在实现其他function前要先走的一个function
    下面的代码里面gender是class variable,作为一个default variable,可以通过self.gender在class function里get到。
    在function里的self.name variable是一个instance variable,这对于每一个object都是独一无二的。
    我们新建了一个karen对象,并没有call init不过可以看到已经实现了这样一个方法

这里写图片描述

  • 下面代码有两个function,正如上面所说,每一个object都会先寻找 _ _ init__() function再依次实现其他的function。

这里写图片描述

  • 和在其他语言里一样,python的class有父类和子类,下面的代码片再明显不过了。父类打印出姓,子类继承了父类(class ChildClass (ParentClass)), 打印名。 子类在继承父类的同时,继承所有父类的function,当然也可以override,只要在子类下面重写方法即可。
class Parent:

    def last_name(self):
        print('Dufresne')

class Child(Parent):

    def first_name(self):
        print('Andy')
    def last_name(self):
        print('Robbins')

andy = Child()
andy.first_name()
andy.last_name()
  • 在python里面,一个子类可以继承多个父类,比如下面这段代码:
    Mario类有移动的function,Mushroom有变大的function,BigMario既可以move又可以eat_mushroom, 因此它继承了两个父类,并且拥有这两个类的所有function,当然也可以进行重写。如果在子类下面不需要新添加其他 function,写上pass即可,避免syntax error.
    由于多个父类可能有重名但不同用法的function,在python里,如果遇到重名的function,默认call的是先继承的父类下的function。
class Mario:
    def move(self):
        print('Look, I am moving!')


class Mushroom:
    def eat_mushroom(self):
        print('See? I am bigger!')

    def move(self):
        print('This is me moving under mushroom!')


class BigMario(Mario, Mushroom):
    pass


bigMario = BigMario()
bigMario.eat_mushroom()
bigMario.move()

运行结果如下,不同的继承顺序,执行function也会不一样。
1. move() function是执行的Mario里的
这里写图片描述
2. 下面的move() function是执行的Mushroom里的。

这里写图片描述

参考教程: theNewBoston
欢迎留言讨论

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值