当前位置:首页>python>Python面向对象

Python面向对象

  • 2026-10-11 08:21:17
Python面向对象
一.面向对象
面向对象(Object-Oriented Programming,OOP)是Python中重要的编程范式.面向对象三大特性封装,继承,多态
1.构造函数(__init__)
构造函数在创建对象时自动调用,用于初始化对象属性
class Person:    def __init__(self, name, age):        self.name = name  # 实例属性        self.age = age    # 实例属性p = Person("Alice", 25)  # 自动调用 __init__print(p.name, p.age)     # 输出: Alice 25
2.实例方法,类方法,静态方法
from datetime import datetimeclass Employee:    company="GOOGLE"    salary_rate=1.05    def __init__(self,name,salary):        self.name=name        self.salary=salary    #实例方法    def raise_salary(self):        self.salary*=self.salary_rate        print(f"{self.name}加薪之后的工资是:{self.salary}")    #类方法(操作属性或作为工厂方法)    @classmethod    def set_raise_rate(cls,new_rate):        cls.salary_rate=new_rate        print(f"新的加薪比例是:{cls.salary_rate}")    #静态方法(与类和示例无关的工具函数)    @staticmethod    def is_workday(day):        if day.weekday() == 5 or day.weekday() == 6:            return False        return Trueif __name__ == "__main__":    #创建员工实例    e1=Employee("Tom",5000)    e2=Employee("Jerry",6000)    #调用实例方法    e1.raise_salary()    e2.raise_salary()    #调用类方法操作类属性    Employee.set_raise_rate(1.08)    e1.raise_salary()    #调用静态方法    current_time=datetime.now()    print(current_time)    print(f"{current_time}是工作日吗?{Employee.is_workday(current_time)}")

方法类型

装饰器

第一个参数

可访问内容

典型用途

调用方式

实例方法

无

self

实例属性、类属性

操作或查询实例状态

obj.method()

类方法

@classmethod

cls

类属性(不能访问实例属性)

修改类状态、创建工厂方法

Class.method() 或 obj.method()

静态方法

@staticmethod

无

无(与类和实例无关)

工具函数,逻辑上属于类的命名空间

3.类继承
类继承属于面向对象编程的核心之一,它允许一个类(子类)继承另一个类(父类)的属性和方法,从而实现代码的重用
1)单继承 (一个子类继承一个父类)
class Animals:    def __init__(self,name):        self.name=name    def speak(self):       raise NotImplementedError("子类必须实现此方法")class Dog(Animals):    def __init__(self,name):        super().__init__(name)    def speak(self):        return self.name+' 汪汪汪'class Cat(Animals):    def __init__(self,name):        super().__init__(name)    def speak(self):        return self.name+' 喵喵喵'if __name__ == '__main__':    animals=[Dog("BINGO"),Cat("kitty")]    for a in animals:        print(a.speak())
2)多继承(一个子类继承多个父类)
class Flyable:    def fly(self):        print("能飞")class Swimmable:    def swim(self):        print("能游泳")class Duck(Flyable, Swimmable):    pass# 使用duck = Duck()duck.fly()duck.swim()
4.抽象方法
抽象类(Abstract Class)它用于定义一组方法的规范,但不提供这些方法的具体实现.抽象类不能被实例化,主要是作为其他类的积累,子类实现特定的方法.
1).抽象类不能实例化
2).子类必须实现所有抽象方法
from abc import ABC,abstractmethodclass Shape(ABC):    @abstractmethod    def area(self):        pass    @abstractmethod    def perimeter(self):        passclass Rectangle(Shape):    def __init__(self,width,height):        self.width=width        self.height=height    def area(self):        return self.width*self.height    def perimeter(self):        return 2*(self.width+self.height)if __name__ == '__main__':    r =  Rectangle(10,20)    print(f"area:{r.area()},perimeter:{r.perimeter()}")
5.多态
多态(Polymorphism)它允许不同类的对象对同一方法调用做出不同的响应.
提高了代码的灵活性和可扩展性
class Animal:    def speak(self):        passclass dog(Animal):    def speak(self):        print("汪汪汪")class Cat(Animal):    def speak(self):        print("喵喵喵")class Duck(Animal):    def speak(self):        print("嘎嘎嘎")def animal_speak(animal:Animal):    animal.speak()if __name__ == "__main__":    dog=dog()    cat=Cat()    duck=Duck()    animal_speak(dog)    animal_speak(cat)    animal_speak(duck)

最新文章

随机文章