Python 极简核心:类

1. 类的意义

首先,需要明白的是“类“这种语法结构存在的目的:将数据和操作数据的方法封装在一个类中,类的成员函数是类对外的接口,而这也正是面向对象语言的本质。

面向过程面向对象

  • 面向过程函数为中心,以函数作为划分程序的基本单位,数据往往处于从属地位。
  • 面向对象数据为中心,以类作为数据的表现工具,类是划分程序的基本单位,函数成为类的接口。

2. 类属性和类方法

概念

下面的关系,对于理解类的思想以及结构都十分重要:

类结构描述
属性共性共性——属性——由赋值来实现
个性个性——对象属性——使用__init__中的self参数 赋值来实现
方法个性个性——对象属性——由函数来实现

例子

class My_module():
    '''
    country = 'China'  # 类属性——共性——静态(赋值)
    location = 'SH'    # 类属性——共性——静态(赋值)
    '''
    country = 'China'
    location = 'SH'
    def __init__(self, name, gender):
        '''
        :param name: 对象属性——个性——静态(借助 self 赋值)
        :param gender: 对象属性——个性——静态(借助 self 赋值)
        '''
        self.name = name
        self.gender = gender
    def say_hi(self, words):
        '''
        :param words: 方法——个性——动态(函数)
        :return: 打印出输入的字符串
        '''
        print(words)

my_module = My_module("Robin", "male") # 创建My_module()类的一个对象

print(f"In {my_module.country}") # 引用类属性
print(f"This is {my_module.name}.") # 引用对象属性
my_module.say_hi("Nice to meet you sir!") # 调用方法

In China
This is Robin.
Nice to meet you sir!

封装、继承、多态

一些补充

为什么使用__init__和 self ?

上面已经解释的很清楚了,因为有些属性可能存在个体差异,所以我们需要通过self来操作对象的属性(注意不是再是“类属性”)。

补:随记

Python 中的 __init__魔术方法如何理解?如果一个类中没有定义__init__会怎样?

首先,__init__方法负责初始化。初始化有什么效果,看下面的例子,为 高三6班同学建立一个分数档案:

1、 无__init__

class Student():
    class_level =  h3
  • 创建学生 A 并获取学生 A 的分数:

    student_A = Student()
    student_A.score = [100, 125, 138]
    
    score_student_A = student_A.score
    
  • 创建学生 B 并获取学生 B 的分数:

    student_B = Student()
    student_B.score = [121, 98, 109]
    
    score_student_B = student_B.score
    

以上这种方式,通过添加或者修改属性的方式是有很多缺点的,第一书写麻烦,第二属性 score 被暴露了出来

2、使用__init__进行初始化

class Student():
    class_level = h3
    def __init__(self, data):
        self.score = data
  • 创建学生 A 并获取学生 A 的分数:

    student_A = Student([100, 125, 138])
    
    score_student_A = student_A.score
    
  • 创建学生 B 并获取学生 B 的分数:

    student_B = Student([121, 98, 109])
    
    score_student_B = student_B.score
    

重点分析下实例参数的传递过程,来理解__init__所起的作用:

在新建学生 A 实例( Student([100, 125, 138]))的同时,其中的参数 [100, 125, 138]会被传给__init__函数(可以看出来__init__规定了传入参数的个数),而self永远指代新建的那个实例对象。

更多类容可以参考的一系列列回答:Python中 __init__的通俗解释是什么?

查看对象的类型和属性

lst = [1, 2, 3]
  • 查看对象类型:type()

    type(lst)
    
    <class 'list'>
    
  • 查看对象属性:dir()

    dir(lst)
    
    ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值