2.4.2Python-self扩展

总目录:https://blog.csdn.net/qq_41106844/article/details/105553392

Python - 子目录:https://blog.csdn.net/qq_41106844/article/details/105553333

 

 

在类基础中简单说过self的用法和含义。这里我们细说一下。

 

首先定义一个类

class Dog(object):

    pass

Dog = Dog()

因为类有模板的作用,因此,可以在创建实例的时候,把我们认为必须绑定的属性强制填写进去。这里就用到Python当中的一个内置方法__init__方法,例如在Dog类时,把name、age等属性绑上去:

class Dog(object):

    def __init__(self, name, age):

        self.name = name

        self.age = age

这里注意:

1、__init__方法的第一参数永远是self,表示创建的类实例本身,因此,在__init__方法内部,就可以把各种属性绑定到self,因为self就指向创建的实例本身

2、有了__init__方法,在创建实例的时候,就不能传入空的参数了,必须传入与__init__方法匹配的参数,但self不需要传,Python解释器会自己把实例变量传进去

class Dog(object):

    def __init__(self, name, age):

        self.name = name

        self.age = age

dog =Dog('哈士奇',2)

print(dog.name)

print(dog.age)

哈士奇 

2

这里self就是指类实例本身,self.name就是Dog实例对象,是该Dog实例对象独有的。而name是外部传来的参数,不是Dog类所自带的。故,self.name = name的意思就是把外部传来的参数name的值赋值给Dog实例对象自己的属性变量self.name。

 

例2:

class Dog:

    def __init__(self,name,type = None,call = '汪'):

        self.name = name

        self.type = type

        self.call = call

 

    def calls(self,second):

        self.call = self.pay*second 

        return self.call

 

p = Dog("旺财","中华田园犬")

print(p.calls(3))

汪汪汪

self是指当前被调用的对象,对的,就是上边刚被你实例化的对象p。当你需要调用当前对象(实例对象)的方法或者属性时,要用self. 来进行调用。

 

例3:

class Dog:

    def setdog(self,x,y):

        self.x = x

        self.y = y

    def printdog(self):

        print("我喜欢什么狗:"+self.x +"和"+self.y)

dd = Dog()

dd.setXY("哈士奇","中华田园犬")

self参数:当实例对象dd去调用setdog方法的时候,它传入的第一个参数就是dd,那么self.x = "哈士奇",self.y = "中华田园犬"也就相当于dd.x = "哈士奇",dd.y = "中华田园犬",所以你在实例对象,甚至类对象中都看不到x和y,因为这两个属性是只属于实例对象dd的。

 

例4:

class TestClass(object):

    val1 = 100

    def __init__(self):

        self.val2 = 200

 

    def fcn(self, val=400):

        val3 = 300

        self.val4 = val

        self.val5 = 500

 

if __name__ == '__main__':

    inst = TestClass()

    print(TestClass.val1)

    print(inst.val1)

    print(inst.val2)

    #print(inst.val3)

    #val3为局部变量,无法在函数为调用'TestClass' object has no attribute 'val3'

    #print(inst.val4)

    #print(inst.val5)

这里

val1是类变量,可以由类名直接调用,也可以有对象来调用;

val2是成员变量,可以由类的对象来调用,这里可以看出成员变量一定是以self.的形式给出的,因为self的含义就是代表实例对象;

val3不是成员变量,它只是函数fcn内部的局部变量;

val4和val5也都不是成员变量,虽是以self.给出,但并没有在构造函数中初始化。

 

注:

在类方法中也可以调用其他方法

class Dog():

    def __init__(self,name,age):

        self.name = name

        self.age = age

 

    def get_dog_information(self):

        dog_information = "name is {0},age is {1}".format(self.name,self.age)

        return dog_information

 

    def get_dog_speak(self,love):

        dog_speak = self.get_dog_information() + love

        return dog_speak

 

dog = Dog("jake",13)

print(dog.get_dog_speak("swimming"))

name is jake,age is 13swimming

在上面例子中:在get_dog_information()方法中调用了get_dog_information(),且get_dog_information()方法前加了self参数,该参数的意义与其他self的意思一样,都是代表实际本身

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寒 暄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值