📅  最后修改于: 2023-12-03 15:11:48.451000             🧑  作者: Mango
面向对象编程是一种思想,它的核心是将真实世界的事物抽象成程序中的对象,通过对象之间的交互来完成所需功能。良好的面向对象设计应该具备以下特点:
封装是面向对象编程的基本特点之一。类的封装性基于类的内部实现,通过访问控制权限设置,保证类的私有属性和方法只能被类的内部成员访问。它使得类不受外部干扰,使得代码具有更高的组织性和安全性。
class Person:
def __init__(self, name, age):
self.__name = name # 私有属性
self.__age = age
def get_name(self):
return self.__name
def get_age(self):
return self.__age
person = Person("Alice", 25)
print(person.get_name()) # 输出 "Alice"
print(person.get_age()) # 输出 25
print(person.__name) # 抛出 AttributeError 异常
注意:我们可以通过添加 _类名__属性名
的方式获取私有属性,但这种方式不被推荐,因为这种方式破坏了封装性。
继承是面向对象编程的另一个基本特点,它是指一个类可以从另一个类那里继承所有属性和方法。一个子类可以扩展或修改父类的方法,从而使代码更具复用性。
class Animal:
def __init__(self, name):
self.__name = name
def run(self):
print(f"{self.__name} is running.")
class Dog(Animal):
def bark(self):
print("Wang Wang!")
dog = Dog("旺财")
dog.run() # 输出 "旺财 is running."
dog.bark() # 输出 "Wang Wang!"
在这个例子中,Dog
类从 Animal
类继承了 run
方法,同时也增加了 bark
方法。这样,我们就可以使用父类的方法,同时也可以扩展函数。
多态是指同一操作作用于不同对象,可以有不同的解释和执行。多态通过继承和接口实现,可以提高代码的可扩展性和可维护性。
###例子
class Shape:
def area(self):
pass
class Triangle(Shape):
def __init__(self, base, height):
super().__init__()
self.__base = base
self.__height = height
def area(self):
return 0.5 * self.__base * self.__height
class Rectangle(Shape):
def __init__(self, width, height):
super().__init__()
self.__width = width
self.__height = height
def area(self):
return self.__width * self.__height
shapes = [Triangle(3, 5), Rectangle(4, 8)]
for shape in shapes:
print(shape.area())
在这个例子中,Triangle
和 Rectangle
继承了 Shape
类,但它们对 area()
函数的实现是不同的。通过这种方式,我们可以用一个方法处理多种情况。
接口是指一个类或对象所实现的功能和方法的列表。接口定义一个对象和其他对象交互的方式,而不关心对象的具体实现。
良好的面向对象设计应该具备上述四个特点,它们可以使代码更具可读性、可维护性和可扩展性。在实际应用中,我们也应该遵循这些原则来编写高质量的代码。