Python入门_基础语法03丨类

本文详细介绍了Python中的面向对象编程,包括核心思想、类和对象的创建、类的属性和方法、类间关系(依赖、关联、继承、多态),以及内部类和魔术方法。面向对象编程通过封装、继承和多态实现代码复用和灵活性。
摘要由CSDN通过智能技术生成

目录

一、面向对象编程概述

1、核心思想

2、特征

二、类和对象

1、类的创建

2、类的分类

3、对象的创建

4、类的属性

5、类的方法

6、内部类

7、魔术方法

三、类间关系

1、依赖关系

2、关联关系

3、继承关系

4、多态


一、面向对象编程概述

1、核心思想

把构成问题的各个事物分解成能够完整描述该实体功能的封装类,并通过对象的交互完成问题的解决。

  • 是创建对象的模板,而对象是类的实例化。
  • 一个类可以创建多个对象。

2、特征

  • 封装:不影响其它部分的情况下修改或扩展被封装的变化部分。
  • 继承:子类继承父类,可以继承父类的方法及属性,实现了多态以及代码的重用。
  • 多态:接口的多种不同的实现方式即为多态。

二、类和对象

1、类的创建

'''
bases为继承的父类,默认为object
class documentation string 类文档字符串,对类进行解释说明
'''
class ClassName(bases):
# class documentation string 

class_suite #class_suite是类体,主要包含属性和方法

2、类的分类

  • 经典类
    • Python2.x中类定义的默认方式,不继承object类,其内部由属性和方法组成。
  • 新式类
    • Python3.x中类定义的默认方式,必须继承object类。
    • 如果没有显示指明要继承的父类,则默认继承object类。
'''
经典类
'''
class A:
    pass

'''
新式类
'''
class A(object):
    pass

3、对象的创建

  • 对象包含标识、属性和方法。
  • 标识用于区分不同的对象。
  • 属性和方法与类中的成员变量和成员函数相对应。

4、类的属性

实例的属性值默认共享类的属性值,除非实例对属性赋值则独立出来。

  • 公有属性
    • 类中和类外都可调用的属性。
    • 无特别命名的话,变量默认为公有属性。
  • 私有属性
    • 只能被类中函数调用的属性。
    • 以双下划线"__"命名。
  • 内置属性
    • 系统默认添加的属性。
    • 前后各以双下划线"__"命名。

内置类属性

  • __name__ 类的名字
  • __doc__类的文档字符串
  • __bases__所有父类构成的元祖
  • __dict__类的属性
  • __module__类定义的模块
  • __class__实例对应的类(新式类)

内置实例属性

  • __class__实例对象所属的类名
  • __dict__实例对象的属性

5、类的方法

  • 公有方法
    • 类无法直接调用,实例对象才能调用。
  • 私有方法
    • 不能被外部的类和对象所调用。
    • 定义时在方法名前加上双下划线"__"。
  • 类方法
    • 类和对象都可以调用。
    • 被classmethod函数调用或被@classmethod装饰器修饰的方法。
  • 静态方法
    • 可被类直接调用&所有实例可共享。
    • 通过staticmethod函数调用或被@staticmethod装饰器修饰的方法。
    • 不需要声明"self"。
#公有方法
def Play(self):
    pass

#私有方法
def __Play(self):
    pass

#类方法1
def Play(self):
    pass

Play_A=classmethod(Play)

#类方法2
@classmethod
def Play(self):
    pass

#静态方法1
def Play():
    pass

Play_B=staticmethod(Play)

#静态方法2
@staticmethod
def Play():
    pass

类方法和静态方法原理上的区别:

  1. 静态方法不能使用self的方式调用。
  2. 静态方法调用时会预先将类中用到的属性和方法进行加载,而类方法则是随调随用。因此,类方法相比静态方法具有不占资源的优势,但是速度不及静态方法。
  3. 静态方法调用类中的属性时需要使用“类名.属性”的格式。    

6、内部类

  • 类的内部定义的类
  • 内部类的调用
    • 直接使用外部类调用内部类
    • 先对外部类进行实例化,然后再实例化内部类。
class People():
    code = 0

    class Father():
        code = 1

    class Mother():
        code = 2


zhangsan = People()
lisi = zhangsan.Father()  # 第一种实例化方法
print(lisi.code)  # 输出结果:1
liming = People.Mother()  # 第二种实例化方法
print(liming.code)  # 输出结果:2

7、魔术方法

  • 所有以双下划线“__”包起来的方法。
    • 实例化时会自动调用。
  • 常见魔术方法
    • “__init__()”(构造函数):初始化类的内部状态和参数。
      • 如果不提供,系统提供默认的“__init__()”。
    • “__ del __()”(析构函数):释放对象占用的资源,可选。

三、类间关系

1、依赖关系

  • 依赖关系的表现形式
    • A:依赖方 B:被依赖方。
    • 类A的某个成员方法的参数中使用了类B。
    • 类B作为类A的方法返回值存在。

2、关联关系

  • 关联关系是一种强依赖的关系。
  • 类A和类B,如果互为成员变量则为双向依赖,否则为单向依赖。

关联关系与依赖关系的区别

  • 依赖关系是一种临时的关系,依赖关系主要体现在方法参数,当调用方法时才有关系。
  • 关联关系是一种长期的关系,主体现在成员变量,无论是否调用方法这种关系都存在。

3、继承关系

  • 在已有类基础上构建子类的机制。
  • 子类可以继承父类的功能&增加新的属性或功能。

注意:

  1. 子类可以对父类的方法进行覆盖实现。
  2. 子类可重新定义父类中的属性。
  3. 一个父类可由多个子类继承,一个子类也可继承多个父类。
  4. 如果父类定义了__init__()方法,子类也定义了自己的__init__()方法并且还要使用父类的__init__()方法, 子类需要显式调用父类的__init__()方法。
  5. 如果子类需要扩展父类的初始化行为,可以添加__init__()方法参数。
  6. 当继承的多个父类中有相同的属性或方法时,默认继承从左往右第一个父类的属性或方法。

4、多态

  • 定义角度:同一类事物的多种形态,如猫的多种形态:白猫、黑猫、花猫等。
  • 使用角度:同一种调用方式,不同的执行效果。
  • 程序角度:定义了一个函数接口,在这个函数中定义了所有类中通用的功能。
    • 根据不同对象的相同调用接口,就得到不同的结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值