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