1. 父类与子类的定义
在Python中,我们可以使用类来定义对象的属性和方法。父类也被称为基类或超类,子类继承了父类的属性和方法,并可以在子类中添加新的属性和方法。
下面是一个简单的示例,展示了如何定义一个父类和一个子类:
父类
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
print("I am an animal.")
子类
class Dog(Animal):
def __init__(self, name, breed):
super().__init__(name)
self.breed = breed
def speak(self):
super().speak()
print("I am a dog.")
在上面的示例中,Animal是一个父类,它有一个属性name和一个方法speak。Dog是Animal的子类,它继承了Animal的属性和方法,并添加了一个新的属性breed和一个新的方法speak。
2. 子类的继承
子类可以继承父类的属性和方法,并且还可以修改或扩展这些属性和方法。
在上面的示例中,Dog继承了Animal的属性name和方法speak,同时还添加了一个新的属性breed和一个新的方法speak。
我们可以创建一个Dog对象并调用它的属性和方法:
dog = Dog("Tommy", "Golden Retriever")
print(dog.name) # 输出: Tommy
print(dog.breed) # 输出: Golden Retriever
dog.speak() # 输出: I am an animal. I am a dog.
在上面的示例中,我们创建了一个名为dog的Dog对象,它继承了Animal的name属性和speak方法。我们还添加了一个breed属性和一个speak方法。
注意,在子类的方法中,我们可以使用super()函数调用父类的方法。在我们的示例中,子类的speak方法首先调用父类的speak方法,然后再输出自己的内容。
3. 子类的重写
在子类中,我们可以重新定义父类的方法,这被称为方法重写。子类重写的方法会覆盖父类的方法。
在上面的示例中,Dog类重写了Animal类的speak方法。当我们调用Dog对象的speak方法时,它会输出子类的内容而不是父类的内容。
4. isinstance()函数
在Python中,我们可以使用isinstance()函数来检查一个对象是否是一个类的实例,或者是该类的子类的实例。
下面是一个示例:
animal = Animal("Animal")
dog = Dog("Tommy", "Golden Retriever")
print(isinstance(animal, Animal)) # 输出: True
print(isinstance(dog, Animal)) # 输出: True
print(isinstance(animal, Dog)) # 输出: False
print(isinstance(dog, Dog)) # 输出: True
在上面的示例中,我们创建了一个Animal对象和一个Dog对象,然后使用isinstance()函数检查它们的类型。我们发现Animal对象是Animal类的实例,但不是Dog类的实例;而Dog对象既是Animal类的实例,也是Dog类的实例。
5. super()函数
在子类中,我们可以使用super()函数来调用父类的方法。
在上面的示例中,Dog类的speak方法调用了父类Animal的speak方法。使用super()函数可以在子类中直接调用父类的方法,而不需要指定父类的名称。
需要注意的是,在Python 3中,我们可以使用super()函数简化父类调用的方法,而在Python 2中,我们需要指定父类的名称来调用父类的方法。
总结
在Python中,子类继承了父类的属性和方法,并且可以添加新的属性和方法。子类可以重写父类的方法,并通过super()函数调用父类的方法。我们可以使用isinstance()函数检查一个对象的类型,以及使用super()函数调用父类的方法。