一、什么是面向对象编程(OOP)?
面向对象编程是一种将数据和操作数据的方法封装到对象中的编程范式。它强调“对象”和“类”的概念,让代码更易维护、扩展和复用。
1.1 OOP的三大特性
- 封装:将数据和方法绑定在一起,隐藏内部实现细节
- 继承:子类可以继承父类的属性和方法,实现代码复用
- 多态:不同对象可以以统一的接口调用,实现灵活扩展
二、Python中的类与对象
2.1 定义类和创建对象
class Dog:
def __init__(self, name): # 类的初始化函数
self.name = name
def bark(self):
print(f"{self.name} says: Woof!")
dog1 = Dog("Buddy")
dog1.bark() # 输出:Buddy says: Woof!
2.2 实例属性与方法
- 实例属性:每个对象独有的数据(如
self.name) - 实例方法:操作实例属性的函数(如
bark)
2.3 类的初始化函数
初始化函数,也叫构造函数,当你创建一个实例的时候,这个函数就会被自动调用调用。
构造函数(初始化函数)格式:
def __init__(self,[...):
dog1 = Dog("Buddy"),当代码执行到这句的时候会自动调用__init__(self, name)函数
2.4 类的析构函数
当一个类销毁的时候,就会调用析构函数。
析构函数(初始化函数)格式:
def __del__(self,[...):
示例代码:
class Dog:
def __init__(self, name): # 类的初始化函数
self.name = name
def __del__(self): # 类的析构函数
print(f"{self.name} is being destroyed.")
def bark(self):
print(f"{self.name} says: Woof!")
dog1 = Dog("Buddy")
dog1.bark() # 输出:Buddy says: Woof!
del dog1 # 输出:Buddy is being destroyed.
- 当调用
del dog1销毁对象的时候会自动调用__del__函数
三、类属性与类方法
3.1 类属性
class Dog:
species = "Canine" # 类属性,所有实例共享
def __init__(self, name):
self.name = name
print(Dog.species) # Canine
dog1 = Dog("Buddy")
print(dog1.species) # Canine
3.2 类方法和静态方法
class Dog:
species = "Canine"
@classmethod
def info(cls):
print(f"All dogs are {cls.species}")
@staticmethod
def say_hello():
print("Hello from Dog class!")
Dog.info() # 类方法
Dog.say_hello() # 静态方法
四、继承与多态
4.1 继承
4.1.1 调用父类的方法
class Animal:
def speak(self):
print("Animal speaks")
class Dog(Animal):
pass
dog = Dog()
dog.speak() # 输出:Animal barks
4.1.2 重写父类方法
class Animal:
def speak(self):
print("Animal speaks")
class Dog(Animal):
def speak(self):
print("Dog barks")
dog = Dog()
dog.speak() # 输出:Dog barks
4.2 多态
指对不同类型的变量进行相同的操作,它会根据对象(或类)类型的不同而表现出不同的行为。
class Animal:
def speak(self):
print("Animal speaks")
class Dog(Animal):
def speak(self):
print("Dog barks")
class Cat(Animal):
def speak(self):
print("Cat meows")
def make_animal_speak(animal):
animal.speak()
cat = Cat()
dog = Dog()
make_animal_speak(cat) # Output: Cat meows
make_animal_speak(dog) # Output: Dog barks
五、特殊方法与魔法方法
5.1 __str__ 和 __repr__
class Dog:
def __init__(self, name):
self.name = name
def __str__(self):
return f"Dog: {self.name}"
dog = Dog("Buddy")
print(dog) # 输出:Dog: Buddy
5.2 运算符重载
class Vector:
def __init__(self, x, y):
self.x = x
self.y = y
def __add__(self, other):
return Vector(self.x + other.x, self.y + other.y)
v1 = Vector(1, 2)
v2 = Vector(3, 4)
v3 = v1 + v2
print(v3.x, v3.y) # 输出:4 6
六、封装与私有属性
class Person:
def __init__(self, name):
self.__name = name # 私有属性
def get_name(self):
return self.__name
p = Person("Alice")
print(p.get_name()) # Alice
# print(p.__name) # AttributeError
最后
如果你觉得这篇文章有用,记得点赞、关注、收藏,学Python更轻松!!