封装(Encapsulation):
封装是面向对象编程的四大特性之一,它是指隐藏对象的属性和实现细节,仅对外公开接口,控制对属性的访问。这样可以提高代码的可读性和安全性。
代码示例:
python复制代码
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 | |
# 使用封装 | |
p = Person('Tom', 20) | |
print(p.get_name()) # 输出:Tom | |
print(p.get_age()) # 输出:20 |
在这个例子中,__name
和 __age
是私有属性,它们只能通过公有方法 get_name
和 get_age
访问,不能直接访问。这就是封装的概念。
继承(Inheritance):
继承是面向对象编程的另一个重要特性,它允许我们定义一个新类(子类),该类继承自一个已存在的类(父类),并可以添加新的方法和属性,或者重写父类的方法。
代码示例:
python复制代码
class Animal: | |
def __init__(self, name): | |
self.name = name | |
def speak(self): | |
raise NotImplementedError("子类必须实现此方法") | |
class Dog(Animal): | |
def speak(self): | |
return "汪汪汪" | |
class Cat(Animal): | |
def speak(self): | |
return "喵喵喵" | |
# 使用继承 | |
d = Dog('小黑') | |
print(d.name) # 输出:小黑 | |
print(d.speak()) # 输出:汪汪汪 | |
c = Cat('小花') | |
print(c.name) # 输出:小花 | |
print(c.speak()) # 输出:喵喵喵 |
在这个例子中,Dog
和 Cat
是 Animal
的子类,它们继承了 Animal
的 name
属性和 speak
方法,并实现了自己的 speak
方法。
多态(Polymorphism):
多态是面向对象编程的又一重要特性,它是指允许不同类的对象对同一消息作出响应。在Python中,多态主要体现在方法的重写和方法的重载上。
代码示例:
python复制代码
class Shape: | |
def area(self): | |
raise NotImplementedError("子类必须实现此方法") | |
class Circle(Shape): | |
def __init__(self, radius): | |
self.radius = radius | |
def area(self): | |
return 3.14 * self.radius ** 2 | |
class Rectangle(Shape): | |
def __init__(self, width, height): | |
self.width = width | |
self.height = height | |
def area(self): | |
return self.width * self.height | |
# 使用多态 | |
shapes = [Circle(5), Rectangle(4, 6)] | |
for shape in shapes: | |
print(shape.area()) # 不同的对象调用相同的方法,但行为不同 |
在这个例子中,Circle
和 Rectangle
是 Shape
的子类,它们都实现了 Shape
的 area
方法。当我们遍历 shapes
列表并调用每个对象的 area
方法时,每个对象都会根据自己的实现来计算面积,这就是多态的体现。