• Python——类和对象(二)


    一、实例方法和自动绑定self

    在类中定义的实例方法,Python会自动绑定方法的第一个参数(通常是self,下文也默认为self),第一个参数总会指向调用该方法的对象,因为实例方法(包括构造方法)第一个self参数会自动绑定,所以调用普通方法和实例方法时不需要为第一个参数传值(方法第一个参数代表的对象是不确定的,只有这个方法被调用,它代表的对象才会被确定下来)。

    • self在构造函数中引用,表示该构造方法正在初始化的对象。
    • self在普通实例方法中引用,表示调用该方法的对象。

    例:

    class a:
    	def __init__(self):
    		k1 = 1    # 在构造方法中定义k1局部变量
    		print ('k1的值:',k1)
    		self.k1 = 2    # self代表构造方法正在初始化的对象的k1实例变量变为2
    		print ('k1初始化后的值:',self.k1)
    
    	def b(self):
    		print ('执行b方法')
    
    	def c(self):
    		self.b()    # 使用self参数引用调用c()方法的对象,不加self将会报错NameError: name 'b' is not defined
    		print ('执行c方法')
    
    A = a()
    '''
    构造函数执行了一遍,打印 
    k1的值: 1
    k1初始化后的值: 2
    '''
    A.c()
    '''
    执行b方法
    执行c方法
    '''  

    如果在方法中把self参数作为返回值,则可以连续多次调用同一个方法,例:

    class p:
    	def y(self):
    		print ('执行y方法')
    		return self
    
    P = p()
    P.y().y().y().y()
    '''
    打印 
    执行y方法
    执行y方法
    执行y方法
    执行y方法
    <__main__.p object at 0x0000000002EAAC50>
    '''
    

      

    二、函数和方法的区别

    调用类的方法可以以函数的方式执行它或者以方法调用,区别如下:

    • 函数:直接使用类名.实例名调用,需要手动传self。
    • 方法:如果是一个函数,使用函数名调用,如果是一个方法,使用对象.实例名调用,不需要手动传self。

    例:

    class a:
    	def __init__(self):
    		k1 = 1
    		print ('k1的值:',k1)
    		self.k1 = 2
    		print ('k1初始化后的值:',self.k1)
    
    	def b(self):
    		print ('执行b方法')
    
    	def c(self):
    		self.b()
    		print ('执行c方法')
    
    
    # 实例化
    A = a()
    A.c()    # 方法
    a.c(A)    # 函数,需要手动传self
    
    # 可以使用ininstance()函数判断是函数还是方法
    from types import FunctionType,MethodType
    
    print (isinstance(A.c,MethodType))  # 打印 True
    print (isinstance(A.c,FunctionType))  # 打印 False
    
    print (isinstance(a.c,MethodType))  # 打印 False
    print (isinstance(a.c,FunctionType))  # 打印 True
    
  • 相关阅读:
    ActionBarSherlock的使用--------(一)配置
    宣布发布 Windows Azure ExpressRoute,宣告与 Level 3 建立全新的合作伙伴关系并推出关于其他 Azure 服务令人振奋的更新
    最佳实践:Windows Azure 网站 (WAWS)
    Strata 2014 上的 AzureCAT 粉笔会谈
    Windows Azure HDInsight 支持预览版 Hadoop 2.2 群集
    Windows Azure 网站上的 WordPress 3.8
    进一步探索:Windows Azure 网站中解锁的配置选项
    如何使用 Barracuda 防火墙设置/保护 Azure 应用程序
    Windows Azure 网站自愈
    宣布与 NBC 合作直播索契冬季奥运
  • 原文地址:https://www.cnblogs.com/mingmingming/p/11108142.html
Copyright © 2020-2023  润新知