一、类方法中的self参数含义

  在Python中类的方法都要有self参数,其实质为对类的实例化对象的绑定从而使得在类的实例化对象调用方法时能够确认出是对哪个对象进行操作。

  带self的的参数是人家实例自身的,不带self的,爱谁谁,实例不管

  若是带了self,则可以在一个类中实现跨方法调用,以下例子中,我们使用a.climb()实现对self.x的定义,所以这就是为什么需要现有构造函数(初始化函数__init__)(即先把所有类中的参数全部定义以后,才能调用)

  注:不一定说一定要使用self,我们也可以使用其它的符号,比如使用“我的世界”代替“self”参数也是一样的

  1. class KK:
  2. x = 8
  3. def climb(self):
  4. self.x = 6
  5. def run(self):
  6. y = 5*self.x
  7. print(y)
  8.  
  9. >>> a = KK()
  10. >>> a.run()
  11. 40
  12. >>> a.climb()
  13. >>> a.run()
  14. 30
  15. >>> class KK:
  16. def climb(self):
  17. self.x = 6
  18. def run(self):
  19. y = 5*self.x
  20. print(y)
  21.  
  22. >>> a = KK()
  23. >>> a.climb()
  24. >>> a.run()
  25. 30
  1. class KK:
  2. x = 8
  3. def climb(我的世界):
  4. 我的世界.x = 6
  5. def run(我的世界):
  6. y = 5*我的世界.x
  7. print(y)
  8.  
  9. >>> a = KK()
  10. >>> a.climb()
  11. >>> a.run()
  12. 30

二、Python的魔法方法——构造方法(构造函数)

  def __init__(self,参数)   这个函数会在实例化类对象时自动调用该方法,这些方法若没有定义则系统自动生成,定义这些方法必须在方法名的左右两侧加上双下划线。

  1. a = KK()
  2. >>> a.climb()
  3. >>> a.run()
  4. 30
  5. >>> class KK:
  6. def __init__(我的世界):
  7. 我的世界.x = 6
  8. def run(我的世界):
  9. y = 5*我的世界.x
  10. print(y)
  11.  
  12. >>> a = KK()
  13. >>> a.run()
  14. 30
  15. >>> class KK:
  16. def climb(我的世界):
  17. 我的世界.x = 6
  18. def run(我的世界):
  19. y = 5*我的世界.x
  20. print(y)
  21.  
  22. >>> a = KK()
  23. >>> a.run()
  24. Traceback (most recent call last):
  25. File "<pyshell#127>", line 1, in <module>
  26. a.run()
  27. File "<pyshell#125>", line 5, in run
  28. y = 5*我的世界.x
  29. AttributeError: 'KK' object has no attribute 'x'

三、Python的公有私有成员设置

  严格来说,在Python里面的方法和属性都是公有的,但是可以通过名字转置的方法做出假私有的方法。

  设置假私有的方法很简单,只需要在变量或者方法前面加上双下划线即可,这样我们就没有办法直接对其进行访问

  注:我们可以使用“对象名._类名.成员名” 对其进行访问

  1. class KK:
  2. name = 'kst'
  3. __age = 18
  4.  
  5. >>> a = KK()
  6. >>> print('我的年龄是%d'%a.__age)
  7. Traceback (most recent call last):
  8. File "<pyshell#138>", line 1, in <module>
  9. print('我的年龄是%d'%a.__age)
  10. AttributeError: 'KK' object has no attribute '__age'
  11.  
  12. >>> print('我的年龄是%d'%a._KK__age)
  13. 我的年龄是18

Python32之类和对象2(self参数及魔法方法)的更多相关文章

  1. python语法学习第十天--类与对象相关的BIF、魔法方法

    一些相关的BIF: issubclass(class,classInfo)#判断是否为子类,classInfo可以为多个类的元组,其中一个是,返回true,一个类也被认为是自己的子类,object是所 ...

  2. 【c++】多层次继承类对象的构造函数参数的传递方法

    #include <iostream.h> //基类CBase class CBase { int a; public: CBase(int na) { a=na; cout<< ...

  3. Three---面向对象与面向过程/属性和变量/关于self/一些魔法方法的使用/继承/super方法/多态

    python的面向对象 面向对象与面向过程 面向过程 面向过程思想:需要实现一个功能的时候,看重的是开发的步骤和过程,每一个步骤都需要自己亲力亲为,需要自己编写代码(自己来做) 面向对象 面向对象的三 ...

  4. asp.net MVC中使用Autofac小结 (遇到的最傻错误: 没有为该对象定义无参数的构造函数)

    项目使用的MVC4,.net 4.5 Nuget安装最新的autofac,一直提示不支持.net 4.5.没办法了,最后用Nuget控制台安装的老版本.因为我使用的是MVC4,所以直接安装的是auto ...

  5. 使用 POJO 对象绑定请求参数

    概述 Spring MVC 会按请求参数名和 POJO 属性名进行自动匹配,自动为该对象填充属性值并且支持级联属性.这一特性在日常开发过程中使用频率比较高,开发效率也高,本文主要对 POJO 对象绑定 ...

  6. .Net Framework 4.5.1 ASP.NET MVC 5 下新建视图报“错误 运行所选代码生成器时出错 无法检索元数据 没有为该对象定义无参数构造函数”

    当在控制器中新建视图的时候,选择的视图界面如下: 执行添加后报如下错误: 错误的内容为: 错误运行所选代码生成器时出错 无法检索"XXX"的元数据没有为该对象定义无参数构造函数 U ...

  7. list对象中根据两个参数过滤数据

    list对象中根据两个参数过滤数据 List<demo> list = new List<demo>() { ,b=,c=,d= }, ,b=,c=,d= }, ,b=,c=, ...

  8. JS对象转URL参数(原生JS和jQuery两种方式)

    转自:点击打开链接 现在的js框架将ajax请求封装得非常简单,例如下面: $.ajax({ type: "POST", url: "some.php", da ...

  9. java基础之对象当做参数传进方法的堆栈内存解析

    值类型当做参数传进方法: 引用类型对象当做参数传进方法: String字符串当做参数传进方法:

随机推荐

  1. MySQL之级联删除、级联更新、级联置空

    1. 准备测试表 # 专业表major ))engine=innodb default charset=utf8; # 学生表mstudent ), major int)engine=innodb d ...

  2. Open vSwitch系列实验(一):Open vSwitch使用案例扩展实验

    一.实验目的 通过python脚本调用OpenvSwitch命令: 学习Mininet基于python脚本创建拓扑的实现: 进一步深度使用“ovs-vsctl”命令直接控制Open vSwitch. ...

  3. [Java/Reflect]使用反射机制获得一个对象的属性名和属性值

    一个辅助对象,用于给属性排序 class KeyValue implements Comparable<KeyValue>{ String key; Object value; @Over ...

  4. Javascript之hoisting变量提升

    javascript不仅仅是一门弱类型语言,还是一门解释型语言.一门编程语言的本质就是这样,优点即是缺点,缺点也往往是优点.JS因为有了变量提升,能够使我们在编程时可以忽略“先声明,再使用”的规则,但 ...

  5. Apache-dbutils 简介及事务处理

    一:commons-dbutils简介 commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化 ...

  6. mailgun php 邮件发送 实例

    步骤如下: 通过 composer 获取代码库 获取 API Key 以及 domain 编写代码发送邮件 1. 首先通过 composer 获取依赖代码库,参考官网给的命令 https://docu ...

  7. c#反射动态创建窗体

    根据窗体的名称动态创建窗体 Assembly assembly = Assembly.GetExecutingAssembly();             // 实例化窗体 try { Form f ...

  8. Office Tool Plus

    https://otp.landian.vip/zh-cn/index.html 本软件支持Microsoft Office办公软件最新版本高速下载.卸载.修复.定制化安装.静默安装等诸多功能. 同时 ...

  9. Typescript 介绍和安装编译

    一. Typescript 介绍 1. TypeScript 是由微软开发的一款开源的编程语言. 2. TypeScript 是 Javascript 的超级,遵循最新的 ES6.Es5 规范.Typ ...

  10. windows使用pipenv创建虚拟环境报错UnicodeDecodeError: 'utf-8' codec can't decode byte 0xce in position 4: in...

    原因: 因为windows默认GBK编码,所以报错 解决方法: 最正确的解决方式不清楚,我的解决方式是修改源码,亲测有效: 将你报错位置的(报错位置在你的错误信息里) str(pe.szExeFile ...