1、面向对象编程概述
面向对象编程(OOP)是一种编程范式,它以“对象”为核心,将数据和操作封装在对象中,通过类和对象来实现代码的组织和复用。在Python3中,面向对象编程是其重要的特性之一。
2、类与对象
1.类(Class):类是对象的蓝图或模板,它定义了具有相同属性和方法的对象的集合。类定义了该集合中每个对象所共有的属性和方法。
class MyClass: def __init__(self, value): self.value = value def my_method(self): print(f"The value is {self.value}")
2.对象(Object):对象是类的实例,它包含了类定义的属性和方法。
obj = MyClass(10) print(obj.value) # 输出: 10 obj.my_method() # 输出: The value is 10
3、实例方法
实例方法是定义在类中,并且需要通过对象来调用的方法。它们通常操作对象的状态(即属性)。
class Person: def __init__(self, name): self.name = name def greet(self): print(f"Hello, my name is {self.name}") p = Person("Alice") p.greet() # 输出: Hello, my name is Alice
4、封装
封装是面向对象编程的四大特性之一,它主要用来隐藏对象的属性和实现细节,仅对外提供公共访问方式。这样可以保证对象内部状态的安全,并减少代码的复杂性。
class Encapsulated: def __init__(self, value): self.__value = value # 使用双下划线实现私有属性 def get_value(self): return self.__value def set_value(self, new_value): self.__value = new_value
5、继承
继承是面向对象编程的另一个重要特性,它允许一个类(派生类或子类)继承另一个类(基类或父类)的属性和方法。
1.单继承:子类只继承自一个父类。
class Parent: def say_hello(self): print("Hello from Parent") class Child(Parent): pass c = Child() c.say_hello() # 输出: Hello from Parent
2.多继承:子类可以继承自多个父类。
class Parent1: def say_hello1(self): print("Hello from Parent1") class Parent2: def say_hello2(self): print("Hello from Parent2") class Child(Parent1, Parent2): pass c = Child() c.say_hello1() # 输出: Hello from Parent1 c.say_hello2() # 输出: Hello from Parent2
6、多态
多态意味着不同的对象对同一消息作出响应。在Python中,多态是通过方法重写和继承实现的。
class Shape: def area(self): pass 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 def calculate_area(shape): return shape.area() circle = Circle(5) rectangle = Rectangle(4, 6) print(calculate_area(circle)) # 调用Circle的area方法 print(calculate_area(rectangle)) # 调用Rectangle的area方法
7、私有属性与方法
在Python中,通常使用双下划线前缀来实现私有属性和方法。这样,这些属性和方法就不能直接从类的外部访问,但可以通过类内部提供的公共方法进行访问和操作。
class MyClass: def __init__(self, value): self.__private_value = value # 私有属性 def __private_method(self): # 私有方法 print("This is a private method") def get_private_value(