面向对象编程
面向对象编程(OOP)是一种编程范式,使用“对象”来组织代码。对象是类的实例,类定义了对象的属性和方法。
类和对象
- 类是对象的蓝图或模板,定义了对象的属性和行为。
# 定义一个类
class Dog: # 相当于Dog(object)
# 初始化方法
def __init__(self, name, age):
self.name = name
self.age = age
# 实例方法
def bark(self):
print(f"{self.name} is barking")
# 创建对象(实例)
my_dog = Dog("Buddy", 3)
# 访问对象属性
print(my_dog.name) # 输出 "Buddy"
print(my_dog.age) # 输出 3
# 调用对象方法
my_dog.bark() # 输出 "Buddy is barking"
继承
- 继承是面向对象编程的一个重要特性,允许一个类继承另一个类的属性和方法。基类(父类)和派生类(子类)之间存在继承关系。
# 定义基类
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
print(f"{self.name} is making a sound")
# 定义派生类
class Cat(Animal):
def __init__(self, name, color):
super().__init__(name)
self.color = color
def speak(self):
print(f"{self.name} is meowing")
# 创建派生类对象
my_cat = Cat("Whiskers", "white")
# 访问派生类对象属性和方法
print(my_cat.name) # 输出 "Whiskers"
print(my_cat.color) # 输出 "white"
my_cat.speak() # 输出 "Whiskers is meowing"
多态
多态是指不同类的对象可以通过相同的接口调用方法,产生不同的行为。通常通过方法重载实现。
# 示例代码
class Bird(Animal):
def speak(self):
print(f"{self.name} is chirping")
# 定义一个函数,接受一个动物对象
def animal_speak(animal):
animal.speak()
# 创建不同的动物对象
dog = Dog("Buddy", 3)
cat = Cat("Whiskers", "white")
bird = Bird("Tweety")
# 调用函数
animal_speak(dog) # 输出 "Buddy is barking"
animal_speak(cat) # 输出 "Whiskers is meowing"
animal_speak(bird) # 输出 "Tweety is chirping"
封装
封装是指将对象的属性和方法私有化,保护对象的内部状态不被外部直接访问和修改。通过定义公有和私有方法和属性实现封装。
# 示例代码
class BankAccount:
def __init__(self, owner, balance):
self.owner = owner
self.__balance = balance # 私有属性
def deposit(self, amount):
if amount > 0:
self.__balance += amount
else:
print("存款金额必须大于零")
def withdraw(self, amount):
if amount <= self.__balance:
self.__balance -= amount
else:
print("余额不足")
def get_balance(self):
return self.__balance
# 创建对象
account = BankAccount("Alice", 1000)
# 访问公有属性和方法
print(account.owner) # 输出 "Alice"
account.deposit(500)
account.withdraw(200)
print(account.get_balance()) # 输出 1300
# 试图访问私有属性(会报错)
# print(account.__balance)
通过掌握面向对象编程的基本概念和技巧,你可以编写更具结构化、可扩展性和可维护性的代码。
私有属性
在面向对象编程中,让类属性能够被直接访问是危险的。使用私有属性可以保证属性不能被直接访问修改,增强安全性。私有属性用__
(双下划线)前缀进行标识。
#-- coding:UTF-8 --
# 定义一个类
class Dog:
# 初始化方法
def __init__(self, name, age):
self.name = name
self.__age = age # __age为私有属性
# 创建对象(实例)
my_dog = Dog("Buddy", 3)
# 访问对象属性
print(my_dog.name) # 输出 "Buddy"
#print(my_dog.__age) # 无法访问
# 强制访问私有属性
print(my_dog._Dog__age)