开发一款app大概多少钱推广学院seo教程
1. 类与对象
1.1 基本概念
类是创建对象的蓝图,定义了对象的属性(数据)和方法(行为)。对象是类的实例化实体,每个对象拥有独立的属性值和共享的类方法
示例:定义Dog
类
class Dog:species = "Canis familiaris" # 类属性(所有实例共享)def __init__(self, name, age): # 构造函数self.name = name # 实例属性self.age = agedef bark(self): # 实例方法print(f"{self.name} says: Woof!")
1.2 构造函数__init__
- 作用:初始化对象属性,在实例化时自动调用
-
self
参数:指向实例自身,必须作为方法的第一个参数
案例:学生管理系统
class Student:def __init__(self, id, name, grade):self.id = idself.name = nameself.grade = gradedef display_info(self):print(f"ID: {self.id}, Name: {self.name}, Grade: {self.grade}")# 实例化
student1 = Student(1, "Alice", 85)
student1.display_info() # 输出:ID: 1, Name: Alice, Grade: 85
1.3 属性与方法的类型
类型 | 特点 | 示例 |
---|---|---|
实例属性 | 每个对象独立存储 | self.name |
类属性 | 所有对象共享,修改后全局生效 | Dog.species |
实例方法 | 操作实例属性,需包含self 参数 | def bark(self): |
静态方法 | 不依赖实例/类,用@staticmethod 装饰器 | Math.add(3,5) 8 |
类方法 | 操作类属性,用@classmethod 装饰器,参数为cls | Counter.increment() |
2. 继承与多态
2.1 继承的实现
- 语法:
class ChildClass(ParentClass):
- 优势:代码复用、扩展功能
案例:动物类的层次结构
class Animal: # 父类def __init__(self, name):self.name = namedef speak(self):raise NotImplementedError("子类必须实现此方法")class Dog(Animal): # 子类def speak(self): # 方法重写return f"{self.name} says: Woof!"class Cat(Animal):def speak(self):return f"{self.name} says: Meow!"
2.2 super()
函数
- 作用:调用父类方法,避免重复代码
class ElectricCar(Car):def __init__(self, brand, color, battery):super().__init__(brand, color) # 调用父类构造函数self.battery = battery
2.3 多态的实现
- 方式1:继承+方法重写
animals = [Dog("Buddy"), Cat("Whiskers")] for animal in animals:print(animal.speak()) # 同一接口,不同输出
- 方式2:鸭子类型(动态多态)
class Bird:def fly(self):print("Flying with wings")class Airplane:def fly(self):print("Flying with engines")def let_it_fly(obj):obj.fly() # 不检查类型,只关注行为
3. 抽象类与接口设计
3.1 抽象基类(ABC)
- 作用:强制子类实现特定方法,用
abc
模块实现
from abc import ABC, abstractmethodclass Shape(ABC):@abstractmethoddef area(self):passclass Circle(Shape):def __init__(self, radius):self.radius = radiusdef area(self): # 必须实现return 3.14 * self.radius ** 2
3.2 接口的模拟
- 设计原则:定义行为规范,不关注具体实现
class PaymentInterface(ABC):@abstractmethoddef process_payment(self, amount):passclass WechatPay(PaymentInterface):def process_payment(self, amount):return f"微信支付{amount}元"
4. 高级特性扩展
4.1 封装与私有属性
- 私有化:使用双下划线
__
隐藏数据
class BankAccount:def __init__(self, balance):self.__balance = balance # 私有属性def get_balance(self): # 公共方法访问return self.__balance
4.2 多重继承与MRO
- 问题:菱形继承可能导致方法冲突
- 解决方案:Python使用C3算法确定方法解析顺序
class A:def show(self):print("A")class B(A):def show(self):print("B")class C(A):def show(self):print("C")class D(B, C):passd = D()
d.show() # 输出B(按MRO顺序:D -> B -> C -> A)
5. 综合实战案例
5.1 游戏角色系统
class GameCharacter:def __init__(self, name, health=100):self.name = nameself.__health = healthdef take_damage(self, damage):self.__health = max(0, self.__health - damage)print(f"{self.name}剩余生命:{self.__health}")class Warrior(GameCharacter):def __init__(self, name):super().__init__(name, health=120)self.armor = 20def take_damage(self, damage): # 重写方法super().take_damage(max(0, damage - self.armor))
5.2 分页显示系统
class Paginator:def __init__(self, total_items, per_page=10):self.total_items = total_itemsself.per_page = per_pagedef get_page(self, page_num):start = (page_num - 1) * self.per_pageend = start + self.per_pagereturn list(range(start, min(end, self.total_items)))