python中的类、类实例化、类中参数self

类、对象的定义及联系
        类(class)和对象(object)是两种以计算机为载体的计算机语言的合称。对象(对象是能够看得到、摸的着的真实存在的实体)是对客观事物的抽象,类(是对现实生活中一类具有共同属性和特征的事物的抽象)是对对象的抽象。类是一种抽象的数据类型。它们的关系是,对象是类的实例,类是对象的模板。对类进行实例化,其得到的结果就是生成类的对象。

        我们给出例子说明这一过程。试想,我们人其实就是一个类,是一个特定的人的模板。我们特定的个体人就是这个类下的一个具体的对象。这个对象是经过对该类进行实例化得到的结果,换句话说,这个过程就是对类这个模板增添一系列不同的方法 ( 行为 ) 从而得到不同的对象 ( 特定的个体人 ) 。

                                          

        我们定义一个关于人的类,如下:

class People():
    def __init__(self,id,name,age):
        self.id = id
        self.name = name
        self.age = age
    def walk(self):
        print(f"{self.name}爱走路!")
    def run(self):
        print(f"{self.name}爱跑步!")
    def sing(self):
        print(f"{self.name}爱唱歌!")

        首先定义人这个类( class People() );人有身份信息、有姓名、有年龄,这是人的特征,或者也可以被称作属性( __init__( )方法就是用来初始化这些特征的 );人还有自己的行为,比如说人可以走路( def walk() ),或者跑步( def run() ),亦或者唱歌( def sing() )。

        接下来,我们构造两个人(对象),其中一个名叫张三,年龄为18岁,其身份证号为:610XXXX05;另一个名叫李四,年龄为20岁,其身份证号为:610XXXX01。构造的张三、李四这两个人,就是类People( )的实例对象。如下:

zhangsan = People("610XXXX05","张三",18)
lisi = People("610XXXX01","李四",20)

        张三、李四这两个人都有三个特征(属性),他们都有身份证号码、姓名、年龄,换句话说,这三个特征(属性)只要是个人他都会有,只是不同的身份证号码、姓名、年龄塑造了不同的人个体。

print("张三的基本信息如下:","姓名:",zhangsan.name,
      "身份证号码:",zhangsan.id,"年龄:",zhangsan.age)

print("李四的基本信息如下:","姓名:",lisi.name,
      "身份证号码:",lisi.id,"年龄:",lisi.age)

         打印出运行结果为:

张三的基本信息如下: 姓名: 张三 身份证号码: 610XXXX05 年龄: 18
李四的基本信息如下: 姓名: 李四 身份证号码: 610XXXX01 年龄: 20

        我们给不同的人个体增添上他们自己的行为。比如说,张三喜欢走路,而李四喜欢跑步。那么我们给张三添加上走路这个行为,给李四添加上跑步这个行为。如下:

zhangsan.walk() # 给张三这个个体添加上走路行为
lisi.run()# 给李四这个个体添加上跑步行为

        运行结果为:

张三爱走路!
李四爱跑步!

        我们来验证一下张三和李四这两个人(对象)是否真有其各自的行为。

print(zhangsan.walk)
print(lisi.run)
# <bound method People.walk of <__main__.People object at 0x000001BEA5440D48>>
# <bound method People.run of <__main__.People object at 0x000001BEA5440D88>>

        得到结果发现,zhangsan绑定了People()类中的walk方法,lisi绑定了People()类中的run方法。

        接下来,我们研究一下类中参数self的含义

        首先是 python的魔法方法:def __init__(self):

        这个self指的是类实例化的任意一个对象,只要你实例化一个特定的人(对象),这个方法就给这个特定的人加上身份证号、姓名、年龄(注意:此处还没有具体的身份证号码、具体的姓名内容、具体的年龄,只是有这三个标签),就像工厂里的流水线一样。 (self:可表示类实例化后任意的一个对象)。

        其次是方法中的参数self,即def walk(self)、def run(self)、def sing(self)中的参数self:

        self即类的任意一个实例化对象,谁在用某个方法,self指的就是它。比如说张三在用walk这个方法,那么def walk(self) 中的self指的就是张三。换句话说,self可以指人这个类实例化后的任意一个对象,它不是固定的,在给对象加上某个行为(方法)时,那么这个方法的self 表示的就是这个对象。

        我们来通过一个实验更直观的分析方法中的self。如下:

class People():
    def __init__(self,id,name,age):
        self.id = id
        self.name = name
        self.age = age
    def walk(self):
        print(f"{self.name}爱走路!")
    def run(self):
        print(f"{self.name}爱跑步!")
    def sing(self):
        print(f"{self.name}爱唱歌!")

zhangsan = People("610XXXX05","张三",18)
zhangsan.walk() # 给张三这个个体添加上走路行为
# 运行结果为:张三爱走路!
# 张三 替换了{self.name},self参数指代实例对象本身。

        因此,类经过实例化后,self就指实例对象。

        我们再通过一个小实验来分析方法中的self参数。如下:

class People():
    def __init__(self,id,name,age):
        self.id = id
        self.name = name
        self.age = age
    def walk(self):
        print(f"{self.name}爱走路!")
    def run(self):
        print(f"{self.name}爱跑步!")
    def sing(self):
        if self == zhangsan:
           self.run()

zhangsan = People("610XXXX05","张三",18)
lisi = People("610XXXX01","李四",20)
zhangsan.sing() # 此时,self指的是zhangsan这个实例化对象,所以可以执行if判断语句
lisi.sing() # 此时self指的是lisi这个实例化对象,不符合if条件,不能执行
# 运行结果为:张三爱跑步!

        加上了 if 判断语句,最后,张三就有了爱跑步的行为,而李四却没有这个行为。因此,就有,当某个实例对象调用类中的方法时,实例对象借助self去调用类方法。该对象会把自身作为第一个参数自动传给该方法,而这第一个参数就是self。

        注意:__init__(self)中的self与其余方法中的self是一个self,当实例化一个对象后,这个对象指代__init__(self)中的self,当这个对象继续使用该类中其余的某个方法时,那么该方法中的self即为该对象。

参考自:

Python的类、类实例化 - 知乎Python类中的self是什么意思?_python类的self_m0_62346827的博客-CSDN博客

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值