一、实例方法和自动绑定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

Python——类和对象(二)的更多相关文章

  1. python类与对象各个算数运算魔法方法总结

    1.python类与对象各个算术运算魔法方法总结: 2.各个魔法方法应用举例: 3.实例训练: (1)我们都知道在 Python 中,两个字符串相加会自动拼接字符串,但遗憾的是两个字符串相减却抛出异常 ...

  2. python 类和对象的属性

    python类和对象的属性分为类属性和对象属性两大类,类属性属于类,而对象属性属于对象. 1. 父类的对象属性会被子类的对象继承. 2. 父类的类属性会被子类继承,还是作为类属性,如果父类改变了类属性 ...

  3. 一文讲全了Python 类和对象内容

    摘要:这是一个关于 Python 类和对象的全部内容. 本文分享自华为云社区<从零开始学python | Python 类和对象-面向对象编程>,原文作者:Yuchuan  . Pytho ...

  4. python类、对象

    python类.对象 学习完本篇,你将会深入掌握 什么是类,对象 了解类和对象之间的关系 能独立创建一个People(人类),属性有姓名.性别.年龄.提供一个有参的构造方法,编写一个show方法,输出 ...

  5. python 类和对象

    类和对象 类 1.类的组成    数据和函数,二者是类的属性 2.两个作用: 实例化 属性引用  属性引用:类名.属性(增删改查)   实例化: 类名加括号就是实例化,会自动出发__init__的运行 ...

  6. Python类和对象

    目录 类与对象 其他方法 继承 经典类和新式类 派生 组合 接口.归一化设计与抽象类 继承实现的原理 子类中调用父类的方法 指名道姓 super()方法 多态与多态性 封装 单下划线开头 双下划线开头 ...

  7. python 类,对象

    声明类 ''' class 类名: '类的文档字符串' 类体 ''' #我们创建一个类 class Data: pass 声明类 class Person: #定义一个人类 role = 'perso ...

  8. (8)python 类和对象

    一.类和对象 python可以动态的添加删除变量和方法 类中的方法至少要有一个参数,第一个参数会被绑定到类的实例上,通常命名为self 1.构造函数 类中的构造方法名为 __init__(self,. ...

  9. [python]类与对象-下

    [实例对象]可以简称为[实例] 一.类与对象的关系 [类]是[对象]的模板. [类]就像工厂的模具,以它为模板,造出来的成千上万的产品,才是被我们消费.购买.使用,真正融入我们生活的东西.这些产品,在 ...

  10. python 类、对象、方法、属性

    在python中,一个对象的特征也称为属性(attribute).它所具有的行为也称为方法(method) 结论:对象=属性+方法 在python中,把具有相同属性和方法的对象归为一个类(class) ...

随机推荐

  1. Linux MySQL 储存中文失败简单解决办法

    如图,保存的中文都变成了??? show create table table_name;可以查到表的默认编码 这里看到默认的字符集是latin1,而不是utf8 需要修改 alter databas ...

  2. mysql安装和简要操作命令+python基本操作mysql数据库

    mysql数据库是一种关系型数据库管理系统.  一. windows平台安装Mysql数据库. Mysql数据库官网 :https://dev.mysql.com/downloads/windows/ ...

  3. unittest 的用法

    一.discover方法 discover方法可以根据标准加载用例,并将结果返回给测试套件(suite),start_dir:待测试的目录,pattern:测试用例文件名的匹配规. 如: start_ ...

  4. phpstorm设置最多标签数

    在settings=>Editor=>General=>Editor Tabs的Tab limit下可以设置当前窗口能够打开的最多标签数目,默认是10,超过设定值时,会自动关闭前面的 ...

  5. JSP页面中如何注入Spring容器中的bean

    第一步在JSP页面中导入下面的包: <%@page import="org.springframework.web.context.support.WebApplicationCont ...

  6. main方法的详解

    格式 * public static void main(String[] args) {} 针对格式的解释 public 被jvm调用,访问权限足够大. static 被jvm调用,不用创建对象,直 ...

  7. ASP生成JSON数据

    原文地址为:ASP生成JSON数据 < %@LANGUAGE = " VBSCRIPT "  CODEPAGE = " 65001 " % >    ...

  8. 2013年各大小IT公司待遇,绝对真实,一线数据!(初版)

    本人西电硕士,根据今年找工作的情况以及身边同学的汇总,总结各大公司的待遇如下,吐血奉献给各位学弟学妹,公司比较全,你想去的公司不在这里面,基本上是无名小公司了:无名小公司有时也很给力哦以下绝对是各大公 ...

  9. PAT 甲级 1046 Shortest Distance (20 分)(前缀和,想了一会儿)

    1046 Shortest Distance (20 分)   The task is really simple: given N exits on a highway which forms a ...

  10. (五)UML之协作图

    一.什么是协作图? 顾名思义协作图就是合作图,有合作就涉及到多个对象. 协作图(Collaboration Diagram /Communication Diagram,也叫合作图)是一种交互图(in ...