python面向对象

本文介绍了Python中的面向对象编程概念,包括类、对象的定义与创建,类和对象的关系,以及继承和多态的实现。通过实例展示了如何定义类、创建对象、操作对象属性,并探讨了单继承、多继承和超继承,以及多态在实际项目中的应用。
摘要由CSDN通过智能技术生成

一、基础

1、理解面向对象

(1)概念

       面向对象是一种编程思想,将程序中的数据和操作封装成对象,通过对象之间的交互实现功能。它包括类、对象、封装、继承和多态等要素。面向对象编程提高了代码的可维护性、重用性和扩展性,使代码更模块化和易于理解。

(2)面向对象和面向过程的区别

①面向过程强调的是功能行为,以函数为最小单位,考虑怎么做。

②面向对象,将功能封装进对象,强调具备了功能的对象,以类/对象为最小单位,考虑谁来做。

2、类和对象:类负责创建对象

class 类名:
    pass

3、理解类和对象

(1)类:是一系列具有相同特征和行为事物的统称,是一个抽象的概念,不真实存在。

①特征即是属性;

②行为即是方法。

(2)对象:是类创建出来的真实存在的事物。

4、面向对象的简单实现

(1)过程

class My_example(object):
    print("Hello,world!")


if __name__ == '__main__':
    demo = My_example()

(2)结果

Hello,world!

5、创建对象

(1)示例

class My_class:
    def Chinese_class(self):
        print("语文")

    def English_class(self):
        print("英语")


lesson = My_class()
print(lesson)
lesson.English_class()

<__main__.My_class object at 0x000001F6FFFB7FA0>  # 打印的地址
英语

• self

类的方法与普通函数只有一个特别的区别——他们必须有一个额外的第一个参数名称,按照惯例它的名称是self。

6、添加和获取对象属性

• 对象即是特征,对象属性可以在类外面添加和获取,也可以在类内部添加和获取。

(1)__init__方法:初始化对象

①init() ⽅法,在创建⼀个对象时默认被调⽤,不需要⼿动调⽤

②init(self) 中的self参数,不需要开发者传递,python解释器会⾃动把当前的对象引⽤传递过去。

③例:

class My_class:
    def __init__(self):
        self.time1 = "第一节课"

    def Chinese_class(self):
        print(f"{self.time1}语文")

    def English_class(self):
        print("英语")


lesson = My_class()
print(lesson)
lesson.Chinese_class()
lesson.English_class()
<__main__.My_class object at 0x000002A1BA297E80>
第一节课语文
英语

④带参数的init

# -*- coding:utf-8 -*-

class My_class:
    def __init__(self, time1, time2):
        self.time1 = time1
        self.time2 = time2

    def Chinese_class(self):
        print(f"{self.time1}语文")

    def English_class(self):
        print(f"{self.time2}英语")


lesson = My_class("第一节课", "第二节课")
print(lesson)
lesson.Chinese_class()
lesson.English_class()
<__main__.My_class object at 0x00000163FB1B7FD0>
第一节课语文
第二节课英语

(2)str()方法

当使用print输出对象的时候,默认打印对象的内存地址。如果类定义了str 方法,那么就会打印从这个方法中return的数据。

class My_class:
    def __init__(self, time1, time2):
        self.time1 = time1
        self.time2 = time2

    def __str__(self):
        return f"{self.time1}语文,{self.time2}英语"


lesson = My_class("第一节课", "第二节课")
print(lesson)
第一节课语文,第二节课英语

(3)其他方法(篇幅有限下面是介绍常见魔术方法的文章)

python高级知识之常用的魔术方法_python魔术方法_克里斯蒂亚诺·罗纳尔达的博客-CSDN博客

7、类的属性

 •  类的属性分为公开属性和私有属性

class computer:
    __num1 = 1
    num2 = 2
    num4 = __num3 = 0

    def count(self):
        __num3 = self.__num1 + self.num2
        num4 = self.__num1 - self.num2


a = computer()
print(a.num4)
try:
    print(a.__num3)
except AttributeError:
    print("私有变量,不能使用")
0
私有变量,不能使用

 二、进阶

1、继承:在python中一个类可以集成于另一个类也可以继承多个类,被继承的类叫父类(或者叫基类,base class)

①单继承:使用方法调用父类中的方法。
class ability(object):
    def __init__(self):
        self.teacher = "python,爬虫,JS"

    def study(self):
        print(f"老师的技能有:{self.teacher}")


class Apprentice(ability):  # 子类继承父类
    pass


func = Apprentice()
print(func.teacher)
func.study()
python,爬虫,JS
老师的技能有:python,爬虫,JS

②多继承:多继承是根据类的顺序进行调用的。
class ability1(object):
    def __init__(self):
        self.teacher1 = "python,爬虫,JS"

    def study1(self):
        print(f"老师1的技能有:{self.teacher1}")


class ability2(object):  # 子类继承父类
    def __init__(self):
        self.teacher2 = "web,机器学习,深度学习"

    def study2(self):
        print(f"老师2的技能有:{self.teacher2}")


class Apprentice(ability1, ability2):
    def __init__(self):
        ability1.__init__(self)
        ability2.__init__(self)


func = Apprentice()
print(func.teacher1)
print(func.teacher2)
python,爬虫,JS
web,机器学习,深度学习

③超继承:改写父类里面的方法,同时还要保留父类里面的方法。
class ability1(object):
    def __init__(self):
        self.teacher1 = "python,爬虫,JS"

    def study1(self):
        print(f"老师1的技能有:{self.teacher1}")


class ability2(object):  # 子类继承父类
    def __init__(self):
        self.teacher2 = "web,机器学习,深度学习"

    def study2(self):
        print(f"老师2的技能有:{self.teacher2}")


class Apprentice(ability1, ability2):
    def __init__(self):
        ability1.__init__(self)
        ability2.__init__(self)
        self.teacher1 = "C#"
        self.teacher2 = "上位机"

    def student(self):
        print(f"学生又学会了{self.teacher2}、{self.teacher1}")


a = ability1()
a.study1()
b = ability2()
b.study2()

# 修改从父类继承的方法但不影响原来父类的里的方法,依旧可以正常使用
func = Apprentice()
func.student()
老师1的技能有:python,爬虫,JS
老师2的技能有:web,机器学习,深度学习
学生又学会了上位机、C#

2、多态:指的是一类事物有多种形态,一个抽象类有多个子类(因而多态的概念依赖于继承),不同的子类对象调用相同的方法,产生不同的执行结果,多态可以增加代码的灵活度。

class Games:
    name = "运动会"
    print("100,400,1000,铅球,跳远")
    print("可将项目分为两类:")


class TianJing(Games):
    print("田径")


class QiTa(Games):
    print("其他")


games = Games()

tianjing = TianJing()

qita = QiTa()
100,400,1000,铅球,跳远
可将项目分为两类:
田径
其他
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值