Python类

1 面向对象概述

  • 编程语言根据代码的组织方式不同,可分为以下两种:
  1. 面向过程编程语言:就是分析出所要处理的事情,并按步骤列好,然后一步一步实现,类似流水线工作原理。
  2. 面向对象编程语言:就是把要处理的事情分解成各个对象,程序通过各个对象之间的交互执行来解决问题。

1.1 面向对象的由来

  1. 面向过程编程机制对于复杂程序的可扩展性和可维护性极差。
  2. 面向过程编程的代码易读性差,不符合人类观察和处理问题的思路,要是复杂的代码更是难认理解。

1.2 面向对象核心思想

面向对象的核心思想是将问题中的各个事物抽象出来,封装成能够完整描述该实体功能的类,然后通过类之间的交互来解决问题。类是一个模板,对象是类的一个实例,一个可以实例化多个对象,而对象是面向对象编程的基本单位。

1.3 面向对象特点

  1. 封装:分析出可变化的部分并将其封装起来,这样对变化部分进行修改时就不会影响其它部分的代码了,解决了程序的可扩展性。
  2. 继承:类可被继承,如子类继承父类,就继承父类的方法及属性,实现了代码的重用,解决了程序的重用性和扩展性。
  3. 多态:接口多种不同的实现方式就是多态,接口的存在是为不相关的类提供通用的服务,解决了程序的可维护性和可扩展性。

2 创建类

类由属性和方法组成,属性是对数据的封装,方法是对行为的封装,使用类几乎可以模拟任何事物,在Python中创建类的关键字为 class,创建方式如下:

class Dog:
    """简单模拟一下小狗类"""
    def __init__(self, name, age):
        """初始化属性姓名和年龄"""
        self.name = name
        self.age = age
    
    def call(self):
        """小狗会叫"""
        print(f"{self.name} 正在叫,旺旺旺!")
    
    def run(self):
        """小狗会跑"""
        print(f"{self.name} 正在跑!")
  • class后面是类名,表示一个抽象的事物,命名规范为首字母大写
  • 第2行是一个字符串的注释说明,用于对类的功能做个描述
  • _init_() 是类的一个特殊方法,叫构造函数,在创建类实例时会自动调用
  • _init_()方法内可定义类的属性,以self为前缀的变量可供类中的所有方法使用
  • 类还定义了2个方法,call和run

3 创建对象

有了类之后就可以创建对象了,对象是类的实例,创建对象就是类实例化的过程,下面来创建一个名字叫大黄,年龄为3岁的小狗:

dog = Dog('大黄', 3)
print(f"dos的名称叫:{dog.name},年龄:{age}岁")

4 类的属性

4.1 按级别分

  • 类级别属性
  • 实例级别属性:属性值默认共享类级别的属性值,除非进行显示的赋值操作

4.2 按使用范围分

  • 公有属性:类中和类外都可调用的属性,变量默认为公有属性
  • 私有属性:以双下划线“__”开始的变量就是私有属性,不能被类以外的函数调用
  • 内置属性:被双下划线“__”包起来的属性称为内置属性,由Python在定义时自动添加

内置类属性有:

  • name:类的名字
  • doc:类的文档字符串
  • bases:所有父类构成的元组
  • dict:类的属性
  • module:定义类所在的模块
  • class:实例对应的类

内置实例属性有:

  • class:实例对象所属的类名
  • dict:实例对象的属性

5 类的方法

5.1 公有方法

不能被类直接调用,需要实例化后由对象调用。

5.2 私有方法

不能被外部的类和方法调用,定义方式也是在方法前面加上双下划线“__”。

5.3 类方法

能被类和对象所调用,被 classmethod 函数调用 或用 @classmethod 声明的方法为类方法。

5.4 静态方法

又称全局方法,能被类调用,也可被所有实例化对象共享。通过调用staticmethod方法或使用@staticmethod修饰来声明,无需self语句

  • 类的各个方法示例如下:
def Pub(self):    # 公有方法
    pass

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

def Bln(self):    # 类方法,被 classmethod 函数调用的方法为类方法
    Bln_A = classmethod(Bln)

@classmethod
def Bln(self):    # 类方法,用 @classmethod 声明的方法为类方法
    pass

def Bln(self):    # 静态方法,被 staticmethod函数调用的方法为静态方法
    Bln_A = staticmethod(Bln)

@staticmethod
def Bln(self):    # 静态方法,用 @staticmethod声明的方法为静态方法
    pass

类方法与静态方法的区别:

  • 静态方法不能使用self的方式调用。
  • 静态方法会预先将类中用到的属性和方法进行加载,而类方法则是在调用的时候再加载。因此静态方法更占资源,但是速度较快。
  • 静态方法访问类中属性使用“类名.属性”的格式。

6 导入类

Python允许将类存储在模块(.py文件)中,在需要使用时再将其导入。

6.1 导入单个类

from 模块名 import 类名

6.2 从一个模块中导入多个类

from 模块名 import 类名1, 类名2, 类名N

6.3 从一个模块导入所有类

from 模块名 import *

6.4 使用别名

from 模块名 import 类名 as 别名

  • 25
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值