zoukankan      html  css  js  c++  java
  • 论参数self

    此篇文章仅适用于py3.在py2中,a.fuc(x)中的参数x必须是

    类a的实例对象,而py3则可以是任意对象。参考绑定方法和非绑定方法

    当一个对象添加了一个方法,并且此方法的第一个参数为self,或者其他任意名称的时候(只要不为空即可),则此参数指代的是某个对象。当此对象调用此方法时,传递的这第一个参数可以是任意对象,可以是他的对象,甚至可以他本身。但当是此对象的对象在调用该方法时,该参数已经默认了指代的是当前这个对象的对象(这是python设计者的设计,没为什么),在调用的时候不能显氏的传递给此参数任何值,否则会报错(因为此参数已经有值,此值为调用者本身)

    举个例子:

     1 class a:
     2     pass
     3 
     4 
     5 def fuc(sel):
     6     print (sel.arg)
     7 
     8 
     9 class b:
    10     arg = 1
    11     def __init__(self,arg):
    12         self.arg=arg
    13 bb=b(2)
    14 
    15 
    16 a.fuc=fuc#a对象添加fuc方法,sel参数可为任意对象
    17 a.fuc(b)
    18 a.fuc(bb)
    19 
    20 a.arg=3
    21 a.fuc(a)#甚至可以是他本身,也可以是他的对象aa
    22 
    23 
    24 #但是,当此对象的对象调用该方法时,sel已经默认为调用者本身,不必也不能传递任何参数
    25 
    26 aa=a()
    27 aa.fuc()
    28 aa.arg=5
    29 aa.fuc()
    30 aa.fuc(aa)#报错,不能传递任何参数

    同样:

    class a:
        pass
    def fuc(sel)
        print ("ddd")
    
    
    aa=a()
    aa.fuc=fuc#对象aa添加方法fuc,aa在调用fuc时,必须传递参数,此参数可以是任意对象
    
    aa.fuc(aa)
    aa.fuc()#报错,没给sel传参,除非是aa的对象不用传参,本例中aa不是类对象所以无法创建aa的对象
  • 相关阅读:
    SpringBoot读取Resource下文件的几种方式(十五)
    Springboot+vue前后端分离文件上传、下载方式及与Spring的异同(十四)
    springboot多个service互相调用的事务处理(十三)
    Bigdecimal用法
    Linux常见wenti
    informix常见问题
    Spring-boot常见问题(十二)
    浅析VO、DTO、DO、PO的概念、区别和用处(八)
    Tbase读写分离与分库分表
    函数的节流和抖动
  • 原文地址:https://www.cnblogs.com/saolv/p/8732319.html
Copyright © 2011-2022 走看看