python 类中的self

今天工作中写python代码,在def函数定义的时候总要写一个self参数,不明白何意思…百度了一下这个self代表的是类的实例,不是类,所以学习一下相关知识。


下面这个Sms类中的函数是用post请求获取数据,获取的数据是json格式,取json中的body

在send函数中我们就定义了变量self,但其实在函数内部并没有用到它

import requests
import json

class Sms():
    def send(self, url, body):
         request = requests.post(url, json=body)
         return request.json()

在调用的时候也需要写这个self:

def signature(self):
  request = self.interf.send(self.yam.read('url')) # 这里的read是另一个函数

那么明确self的用处:

1)self只有在类的方法中才会有,独立的函数或方法是不必带有self的。

2)self在定义类的方法时是必须有的,虽然在调用时不必传入相应的参数。

3)self名称不是必须的,在python中self不是关键词,定义成a或b或其他名字都可以,只是约定俗成我们定义成了self。

4)self指的是类实例对象本身,不是类本身。

  例1:

class Person:
    def __init__(self, name):
        self.name=name
    def sayhello(self):
        print('My name is:', self.name)
p = Person('Bill')
print(p)

  结果:

<__main__.Person object at 0x000002744FEA8208>  

  上述例子中,self指向【Person】的实例【p】

此外:

5)self在定义的时候需要定义,但是在调用的时候会自动传入

6)self总是指调用时的类的实例

  例2:

class Parent:
    def pprt(self):
        print(self)


class Child(Parent):
    def cprt(self):
        print(self)

c = Child()
c.cprt()
c.pprt()
p = Parent()
p.pprt()

  结果:

<__main__.Child object at 0x000001FC9E7B8BE0>
<__main__.Child object at 0x000001FC9E7B8BE0>
<__main__.Parent object at 0x000001FC9E7B8C50>

  上述例子中,在继承时,传入的是哪个实例,self就是那个传入的实例,而不是指定义了self类的实例.


暂时了解了这么多,然后关于类和类的实例,还不是很懂(之前学的python白学了…),所以后续还需要再学习面向对象这一方面

猜你喜欢

转载自www.cnblogs.com/RebeccaG/p/11726233.html
今日推荐