python中的类、继承和mro列表

class Car:
    def _init_(self, make, model, year):
        """self保存了当前创建的实例在内存中的地址,和形参相关联的值可以通过self关联到当前创建的实例的属性"""
        self.make = make
        self.model = model
        self.year = year
    def get_descriptive_name(self):
        long_name = f"{self.year}{self.make}{self.model}"
        return long_name.title()
"""利用类可以生成实例,然后将这个实例赋给变量my_new_car,实质是将实例的地址赋给了变量my_new_car"""
my_new_car = Car('audi','a4',2019)
print(my_new_car.get_descriptive_name())

python中的类是面向对象语言的特征,类可以表示现实生活中的一大类,例如车,利用类生成实例可以 表示各种品牌、型号、年份不同的车。上述程序中self和my_new_car都是指向实例本身的引用。只是self用于Car类内部,my_new_car用于Car类外部。

  1. 方法_init_()

_init_()方法是python类中的一种特殊方法,每当根据类生成新的实例时,都会自动运行这个方法。上述代码中将_init_()定义成包含4个形参:self、make、model、year。self必不可少,而且必须位于其他形参的前面。因为当python调用这个方法创建Car实例时,将自动传入实参self。每个与实例相关联的方法调用都自动传递实参self,它是一个指向实例本身的引用,让实例可以访问类中的方法和属性。

  1. 继承

  1. 子类的方法_init_()

在既有类的基础上编写新类时,通常要调用父类的方法_init_()。这将初始化在父类_init_()方法中的所有属性,从而让子类包含这些属性。父类和子类的关系可以类比为汽车和电动汽车的关系,下面我们采用继承的方法创建Car类的子类ElectricCar类,在编写继承代码时,父类的代码一定要出现在子类的前面。

class Car:
    def _init_(self, make, model, year):
        """self保存了当前创建的实例在内存中的地址,和形参相关联的值可以通过self关联到当前创建的实例的属性"""
        self.make = make
        self.model = model
        self.year = year
    def get_descriptive_name(self):
        long_name = f"{self.year}{self.make}{self.model}"
        return long_name.title()
"""利用类可以生成实例,然后将这个实例赋给变量my_new_car,实质是将实例的地址赋给了变量my_new_car"""
my_new_car = Car('audi','a4',2019)
print(my_new_car.get_descriptive_name())

"""定义子类时,必须在圆括号内指定父类的名称"""
class ElectricCar(Car):
    """接收创建Car实例所需的信息"""
    def _init_(self, make, model, year):
        """super()是一个特殊函数,让你能够调用父类的方法。这行代码让python调用Car类的方法_init_(),让ElectricCar实例包含这个方法中定义的所有属性"""
        super()._init_(make, model, year)
        """也可以写作super(ElectricCar, self)._init_(make, model, year),这是最完备的写法"""
my_tesla = ElectricCar('tesla','model s','2019')
print(my_tesla.get_descriptive_name())
  1. super的常见用法

上述代码中展示了在python中super的一个常见用法,用于子类调用父类的初始化方法,在类的继承中,如果重定义某个方法,该方法会覆盖父类的同名方法,但有时,我们希望能同时实现父类的功能,这时,我们就需要调用父类的方法了,可通过super()来实现,比如

class Animal(object):
    def __init__(self, name):
        self.name = name

    def greet(self):
        print('the animal name is %s' % self.name)


class Dog(Animal):
    def greet(self):
        super(Dog, self).greet()
        print('wangwang')


dog = Dog('huang')
dog.greet()

结果为

the animal name is huang
wangwang

猜你喜欢

转载自blog.csdn.net/qq_44327024/article/details/129063899