前言
这次的学习内容主要是面向对象的类。
一、创建和使用类
如下是一个类的简单定义,Dog后面没有圆括号,说明这个类没有继承其他类,是从空白创建的该类。
>>> class Dog:
def __init__(self,name,age):
self.name = name
self.age = age
def sit(self):
print("{name} is sit".format(name = self.name))
其中的__init__()方法,是一个魔法方法,这个方法中有三个形参,self,name,age,其中self不能缺少,因为当调用该类创建一个实例时,会自动调用init方法,然后将自动传入实参self,每个与实例相关的方法调用都会自动传递实参self,它是一个指向实例本身的引用,让实例能够访问类中的属性和方法。
其中的sit()方法是一个普通方法,只有一个形参self,说明创建的实例可以调用该方法。
dog_1 = Dog('deng',18)
dog_1.sit()
上面就是创建了Dog类的一个实例dog_1,只传入两个实参name和age,self会自动传入。然后调用sit()方法
有时候也可以给有些属性指定指定默认值。
例如
>>> class Dog:
def __init__(self,name,age):
self.name = name
self.age = age
self.number = 100
def sit(self):
print("{name} is sit".format(name = self.name))
>>> dog_1 = Dog('deng',18)
>>> dog_1.number
100
>>>
在定义这个类时,指定number属性的值为100,创建一个该类的实例,可以打印出这个默认属性的值。
二、继承
编写类时,不一定非要从空白处创建,可以选择继承一个父类。
当一个类继承一个父类时,会获得父类的所有属性和方法。子类继承了父类的所有属性和方法后,同时还可以定义自己的属性和方法。
class Animal:
def __init__(self,name,age):
self.name = name
self.age = age
def sit(self):
print("sittint")
这里定义了一个Animal类
class Dog(Animal):
def __init__(self,name,age,number):
super().__init__(name,age)
self.number = number
然后定义一个Dog类,继承自Animal父类。在子类的__init__方法中,首先super().__init__(name,age)
的作用是调用父类的__init__方法,让子类包含这个方法中定义的所有属性。可以看到子类Dog()比父类Animal()多一个属性number,所以接下来再为number属性赋值。
如果父类的方法对于子类不适应,也可以选择重写父类的方法,在子类中写一个与父类同名的方法名就行。