快速了解python面向对象编程

一、什么是面向对象

面向对象编程(Object-Oriented Programming,OOP)是一种编程范式,它通过将数据和功能组织为对象来设计程序。Python 作为一种支持面向对象的语言,提供了面向对象编程的基本概念和语法结构。

1、类

用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。

class Student:
    def __init__(self,id,name):
        self.id = '1000'   #对象属性
        self.name = '张三'

    def ret(self):    #对象方法
        return f"id是{self.id}姓名是{self.name}的同学爱学习"

2、对象

对象是类的实例,是类的实际存在。每个对象都有自己独立的数据和方法。

class Student:
    def __init__(self,id,name):
        self.id = id   #对象属性
        self.name = name

    def ret(self):    #对象方法
        return f"id是{self.id},姓名是{self.name}的同学爱学习"

s1 = Student(1000,'张三')
print(s1.ret())

3、访问属性

可以使用点号 . 来访问对象的属性。使用如下类的名称访问类变量:

#访问属性
对象名.属性
#访问方法
对象名.方法

4、构造函数 与 析构函数

__init__ 构造函数:完成对象的初始化工作,方便统一管理、调用类创建对象时,自动执行。

__del__ 析构函数:删除对象时执行一些操作,自动执行。

__str__ 打印方法:输出执行信息,自动执行。

class Student:
    def __init__(self,id,name):
        self.id = id
        self.name = name

    def __str__(self):
        return f"id是{self.id},姓名是{self.name}的同学爱学习"

    def __del__(self):
        print  (f"{self.name}学累了,出去玩了")

s1 = Student(1000,'张三')
print(s1)

二、类属性和实例属性

1、类属性

类属性是绑定到类本身的属性,而不是绑定到类的实例。类属性的值对于类的所有实例都是共享的。这意味着如果修改了类属性,所有实例都会受到影响。

特点:

        1、类属性是通过类名访问的,也可以通过实例来访问(但建议通过类访问)。

        2、所有的实例共享同一个类属性。

        3、类属性通常用于存储类级别的信息

class Student:
    age = 18    #类属性
    def __init__(self,name,id):
        self.name = name    #实例属性
        self.id  =id    #实例属性

s1 = Student('张三',1000)
s2 = Student('李四',1001)

print(s1.age)
print(s2.age)

#修改类属性
Student.age = 20

print(s1.age)
print(s2.age)

2、实例属性

实例属性是绑定到类的实例(对象)上的属性。每个实例都有自己独立的实例属性,修改一个实例的属性不会影响其他实例的相同属性。

特点:

        1、实例属性通过实例来访问。

        2、每个实例都有自己的实例属性,互不影响。

        3、实例属性通常用于存储每个对象的特有信息。

class Student:
    def __init__(self,name,id):
        self.name = name    #实例属性
        self.id  =id    #实例属性

s1 = Student('张三',1000)
s2 = Student('李四',1001)

print(s1.name)
print(s2.name)

#修改实例属性
s1.name = '王五'

print(s1.name)
print(s2.name)

三、类方法与实例方法与静态方法

1、类方法

类方法是绑定到类本身的方法,而不是绑定到实例。类方法的第一个参数是 cls,表示当前类(而不是实例)。类方法主要用于操作类级别的数据(即类属性),而不是实例级别的数据。

        1、特点:类方法无法直接访问实例属性,只能访问类属性。

        2、使用:通过类或实例来调用,但它的第一个参数是 cls,代表类对象

        3、定义方式:使用 @classmethod 装饰器来定义类方法。

2、实例方法

实例方法是最常见的方法,它是绑定到实例对象的。实例方法的第一个参数通常是 selfself 代表当前实例对象。

        1、特点:实例方法可以访问和修改实例属性,也可以访问类属性。

        2、使用:通过实例来调用,方法内部可以操作实例数据。

3、静态方法

静态方法是绑定到类本身,但它不需要访问类或实例的任何属性或方法。静态方法没有 selfcls 参数,它就像一个普通的函数,只是放在类的命名空间下。静态方法常用于一些与类功能相关的任务,但不涉及实例数据或类数据的操作。

        1、特点:静态方法不需要访问类或实例的属性和方法,通常用于一些独立的功能。

        2、使用:通过类或实例来调用,但它没有默认的 selfcls 参数。

4、例子:

class Student(object):

    grade = 'py24101'

    @classmethod
    def cls_fun(cls):
        """类方法中只能调用类属性和类方法"""
        print(f"班级名称是{cls.grade}")

    def __init__(self, name, age):
        self.name = name
        self.age = age

    def fun1(self):
        """实例方法中能调用类属性、实例属性"""
        print(f"实例方法中输出类属性{self.grade}, 输出实例属性{self.name}")

    @staticmethod
    def sta_fun(x):
        print(f"{x}静态方法一般实现与类和对象无关联的操作,例如:游戏说明书等")

s1 = Student('张三', 18)
# 如何调用类方法
Student.cls_fun()
s1.cls_fun()

# 如何调用实例方法
Student.fun1(s1)
s1.fun1()

# 如何调用静态方法
Student.sta_fun(3)
s1.sta_fun(3)

四、封装

1、私有属性

私有属性是通过在属性名前加上两个下划线(__)来表示,Python 会对其进行名称改写,使其不能被直接访问。私有属性主要用于保护对象的内部状态,防止外部直接修改。尽管如此,Python 仍然允许通过一些特殊方式来访问私有属性。

class Student:
    def __init__(self, name, age):
        self.__name = name  # 私有属性
        self.__age = age    # 私有属性

    def speak(self):
        return f"{self.__name} 爱学习"

# 创建实例
s1 = Student("张三", 3)

# 直接访问私有属性会报错
# print(s1.__name)  # 会抛出 AttributeError

# 可以通过类名访问
print(s1._Student__name)  # 输出: 张三

# 可以通过方法访问
print(s1.speak())  # 输出: 张三爱学习

2、私有方法

和私有属性相差不大。

class Student:
    def __init__(self, name, age):
        self.__name = name  # 私有属性
        self.__age = age    # 私有属性

    def __info(self):
        print( f"{self.__name} 爱学习")

    def get_info(self):
        self.__info()

# 创建实例
s1 = Student("张三", 3)

# 可以通过类名访问
print(s1._Student__name)  # 输出: 张三

# 可以通过方法访问
s1.get_info()  # 输出: 张三爱学习

五、继承

在 Python 中,继承(Inheritance)是面向对象编程(OOP)中的一个核心概念,它允许我们创建一个新类(子类),继承现有类(父类)的属性和方法,从而实现代码重用和扩展功能。通过继承,子类可以继承父类的所有公有和受保护的属性和方法,同时也可以重写或扩展父类的方法。

继承的基本概念:

        1、父类:被继承的类。

        2、子类:从父类继承的类。

基本语法

class 父类:
    # 父类的方法和属性

class 子类(父类):
    # 子类可以继承父类的方法和属性,也可以扩展或重写父类的方法

关键概念

1. super() 函数

super() 函数用于调用父类的方法或构造函数,通常用于在子类中调用父类的 __init__ 方法,确保父类初始化的操作能够正确执行。

在上面的示例中,super().__init__(name) 用于调用父类 Animal 的构造方法来初始化 name 属性。

2. 方法重写

子类可以重写父类的方法,以便提供特定的实现。通过重写,子类可以修改或扩展父类的行为。

在上面的示例中,DogCat 类都重写了父类 Animalspeak 方法,使得每个子类都有自己特定的行为。

3. 多继承

Python 支持多继承,这意味着一个子类可以继承多个父类的属性和方法。多继承在某些情况下很有用,但也可能导致一些复杂性,尤其是当多个父类中有同名方法时。

4、例子
class Student1:
    def Std1(self):
        return "张三爱学习"

class Student2:
    def Std2(self):
        return "李四爱学习"

class Dog(Student1, Student2):
    def Std1(self):
        return "王五爱学习"

# 创建实例
dog = Dog()
print(dog.Std1())  # 输出: 王五爱学习
print(dog.Std2())  # 输出: 李四爱学习

六、多态

在 Python 中,多态是面向对象编程中的一个重要特性,它指的是不同的类可以通过相同的方法名来执行不同的操作。换句话说,多个不同的类可以定义相同的方法名,但每个类的实现可以不同。通过多态,程序能够以一致的方式处理不同类型的对象,从而使得代码更加灵活和可扩展。

例子:

class Animal(object):
    name = '动物'
    age = 0
    def speak(self):
        print("动物的声音")

class Dog(Animal):
    def speak(self):
        print("汪汪汪")

class Cat(Animal):
    def speak(self):
        print("喵喵喵")

a = Animal()
d = Dog()
c = Cat()

a.speak()
d.speak()
c.speak()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值