面向对象进阶一(static,继承,多态)
发布人:shili8
发布时间:2024-11-03 07:54
阅读次数:0
**面向对象进阶一:静态成员、继承和多态**
在前面的教程中,我们已经学习了面向对象编程的基本概念,如类、对象、属性和方法。然而,面向对象编程还有一些更高级的特性,包括静态成员、继承和多态。这篇文章将深入探讨这些主题。
### 静态成员在面向对象编程中,静态成员是属于类本身,而不是具体实例的成员。换句话说,它们不依赖于任何实例的存在。静态成员可以通过类名直接访问,而不是通过实例名。
**示例代码**
class Person: # 静态成员变量 count =0 def __init__(self, name): self.name = name Person.count +=1# 创建两个Person对象p1 = Person("John") p2 = Person("Alice") print(Person.count) # 输出:2
在上面的示例中,我们定义了一个名为 `count` 的静态成员变量,它记录了创建的 `Person` 对象数量。每当我们创建一个新的 `Person` 对象时,`count` 都会增加。
### 继承继承是面向对象编程的一个重要特性,它允许一个类从另一个类继承属性和方法。这有助于减少代码的重复,并且可以更好地组织类之间的关系。
**示例代码**
class Animal: def __init__(self, name): self.name = name def eat(self): print(f"{self.name} is eating.") class Dog(Animal): def __init__(self, name, breed): super().__init__(name) self.breed = breed def bark(self): print(f"{self.name} says Woof!") # 创建一个Dog对象my_dog = Dog("Max", "Golden Retriever") print(my_dog.name) # 输出: Maxmy_dog.eat() # 输出: Max is eating. my_dog.bark() # 输出: Max says Woof!
在上面的示例中,我们定义了一个 `Animal` 类,它有一个 `name` 属性和一个 `eat()` 方法。然后,我们定义了一个 `Dog` 类,它继承自 `Animal` 类,并且添加了一个新的 `breed` 属性和一个 `bark()` 方法。
### 多态多态是面向对象编程的一个高级特性,它允许同一个方法在不同类中有不同的行为。换句话说,相同的方法名可以指向不同的实现。
**示例代码**
class Shape: def area(self): passclass Rectangle(Shape): def __init__(self, width, height): self.width = width self.height = height def area(self): return self.width * self.heightclass Circle(Shape): def __init__(self, radius): self.radius = radius def area(self): return3.14 * (self.radius **2) # 创建一个Rectangle对象和一个Circle对象rect = Rectangle(4,5) circ = Circle(3) print(rect.area()) # 输出:20print(circ.area()) # 输出:28.26
在上面的示例中,我们定义了一个 `Shape` 类,它有一个 `area()` 方法。然后,我们定义了两个子类:`Rectangle` 和 `Circle`,它们分别实现了自己的 `area()` 方法。
通过继承和多态,我们可以更好地组织类之间的关系,并且减少代码的重复。这是面向对象编程的一个重要特性,它有助于我们创建更加模块化、可维护和扩展的代码。