python 面对对象进阶

1.在子类中调用父类方法

方法一:指名道姓,即父类名.父类方法()

class Vehicle: #定义交通工具类
     Country='China'
     def __init__(self,name,speed,load,power):
         self.name=name
         self.speed=speed
         self.load=load
         self.power=power

     def run(self):
         print('开动啦...')

class Subway(Vehicle): #地铁
    def __init__(self,name,speed,load,power,line):
        Vehicle.__init__(self,name,speed,load,power)    #调用父类的构造函数(初始化)
        self.line=line

    def run(self):
        print('地铁%s号线欢迎您' %self.line)
        Vehicle.run(self)                               #调用父类的方法run()

line13=Subway('中国地铁','180m/s','1000人/箱','',13)
line13.run()

 方法二:super()方法

class Vehicle: #定义交通工具类
     Country='China'
     def __init__(self,name,speed,load,power):
         self.name=name
         self.speed=speed
         self.load=load
         self.power=power

     def run(self):
         print('开动啦...')

class Subway(Vehicle):  # 地铁
    def __init__(self, name, speed, load, power, line):
        # super(Subway,self) 就相当于实例本身 在python3中super()等同于super(Subway,self)
        super().__init__(name, speed, load, power)     #可以不用写父类名,且省去self参数,默认会传入
        self.line = line

    def run(self):
        print('地铁%s号线欢迎您' % self.line)
        super(Subway, self).run()   #=== super().run()

class Mobike(Subway):  # 摩拜单车
    def a(self):
        super(Mobike, self).run()    #调用地铁类的run方法

line13 = Subway('中国地铁', '180m/s', '1000人/箱', '', 13)
line13.run()
mb = Mobike('摩拜单车','10m/s','1人/车','人工动力',1)
mb.a()

 

2 python中的类的定义

  一:

  在类的声明时并未留意到基类object的书写与否 是否会对程序结果造成影响(事实上,并不会有所影响),

但 是,在Python2中,基类object书写与否 会对结果造成很大的影响,这个知识点涉及到新式类、经典类的问题。

    在Python 3.x中取消了经典类,默认都是新式类,并且不必显式的继承object,也就是说:
  class Person(object):
  class Person():
  class Person:
三种写法并无区别,推荐第一种

  二:

  但是在Python2.x中,默认都是经典类,只有显式继承了object才是新式类,即:
  class Person(object):pass 新式类写法
  class Person():pass 经典类写法
  class Person:pass 经典类写法

  • 他们最明显的区别在于继承搜索的顺序发生了改变,即经典类多继承搜索顺序(深度优先):先深入继承树左侧查找,然后再返回,开始查找右侧。
  • 新式类多继承搜索顺序(广度优先): 先在水平方向查找,然后再向上查找。

  

 

posted @ 2019-08-02 00:38  stduy  阅读(106)  评论(0)    收藏  举报