Python32之类和对象2(self参数及魔法方法)
一、类方法中的self参数含义
在Python中类的方法都要有self参数,其实质为对类的实例化对象的绑定从而使得在类的实例化对象调用方法时能够确认出是对哪个对象进行操作。
带self的的参数是人家实例自身的,不带self的,爱谁谁,实例不管
若是带了self,则可以在一个类中实现跨方法调用,以下例子中,我们使用a.climb()实现对self.x的定义,所以这就是为什么需要现有构造函数(初始化函数__init__)(即先把所有类中的参数全部定义以后,才能调用)
注:不一定说一定要使用self,我们也可以使用其它的符号,比如使用“我的世界”代替“self”参数也是一样的
class KK:
x = 8
def climb(self):
self.x = 6
def run(self):
y = 5*self.x
print(y) >>> a = KK()
>>> a.run()
40
>>> a.climb()
>>> a.run()
30
>>> class KK:
def climb(self):
self.x = 6
def run(self):
y = 5*self.x
print(y) >>> a = KK()
>>> a.climb()
>>> a.run()
30
class KK:
x = 8
def climb(我的世界):
我的世界.x = 6
def run(我的世界):
y = 5*我的世界.x
print(y) >>> a = KK()
>>> a.climb()
>>> a.run()
30
二、Python的魔法方法——构造方法(构造函数)
def __init__(self,参数) 这个函数会在实例化类对象时自动调用该方法,这些方法若没有定义则系统自动生成,定义这些方法必须在方法名的左右两侧加上双下划线。
a = KK()
>>> a.climb()
>>> a.run()
30
>>> class KK:
def __init__(我的世界):
我的世界.x = 6
def run(我的世界):
y = 5*我的世界.x
print(y) >>> a = KK()
>>> a.run()
30
>>> class KK:
def climb(我的世界):
我的世界.x = 6
def run(我的世界):
y = 5*我的世界.x
print(y) >>> a = KK()
>>> a.run()
Traceback (most recent call last):
File "<pyshell#127>", line 1, in <module>
a.run()
File "<pyshell#125>", line 5, in run
y = 5*我的世界.x
AttributeError: 'KK' object has no attribute 'x'
三、Python的公有私有成员设置
严格来说,在Python里面的方法和属性都是公有的,但是可以通过名字转置的方法做出假私有的方法。
设置假私有的方法很简单,只需要在变量或者方法前面加上双下划线即可,这样我们就没有办法直接对其进行访问
注:我们可以使用“对象名._类名.成员名” 对其进行访问
class KK:
name = 'kst'
__age = 18 >>> a = KK()
>>> print('我的年龄是%d'%a.__age)
Traceback (most recent call last):
File "<pyshell#138>", line 1, in <module>
print('我的年龄是%d'%a.__age)
AttributeError: 'KK' object has no attribute '__age' >>> print('我的年龄是%d'%a._KK__age)
我的年龄是18
Python32之类和对象2(self参数及魔法方法)的更多相关文章
- python语法学习第十天--类与对象相关的BIF、魔法方法
一些相关的BIF: issubclass(class,classInfo)#判断是否为子类,classInfo可以为多个类的元组,其中一个是,返回true,一个类也被认为是自己的子类,object是所 ...
- 【c++】多层次继承类对象的构造函数参数的传递方法
#include <iostream.h> //基类CBase class CBase { int a; public: CBase(int na) { a=na; cout<< ...
- Three---面向对象与面向过程/属性和变量/关于self/一些魔法方法的使用/继承/super方法/多态
python的面向对象 面向对象与面向过程 面向过程 面向过程思想:需要实现一个功能的时候,看重的是开发的步骤和过程,每一个步骤都需要自己亲力亲为,需要自己编写代码(自己来做) 面向对象 面向对象的三 ...
- asp.net MVC中使用Autofac小结 (遇到的最傻错误: 没有为该对象定义无参数的构造函数)
项目使用的MVC4,.net 4.5 Nuget安装最新的autofac,一直提示不支持.net 4.5.没办法了,最后用Nuget控制台安装的老版本.因为我使用的是MVC4,所以直接安装的是auto ...
- 使用 POJO 对象绑定请求参数
概述 Spring MVC 会按请求参数名和 POJO 属性名进行自动匹配,自动为该对象填充属性值并且支持级联属性.这一特性在日常开发过程中使用频率比较高,开发效率也高,本文主要对 POJO 对象绑定 ...
- .Net Framework 4.5.1 ASP.NET MVC 5 下新建视图报“错误 运行所选代码生成器时出错 无法检索元数据 没有为该对象定义无参数构造函数”
当在控制器中新建视图的时候,选择的视图界面如下: 执行添加后报如下错误: 错误的内容为: 错误运行所选代码生成器时出错 无法检索"XXX"的元数据没有为该对象定义无参数构造函数 U ...
- list对象中根据两个参数过滤数据
list对象中根据两个参数过滤数据 List<demo> list = new List<demo>() { ,b=,c=,d= }, ,b=,c=,d= }, ,b=,c=, ...
- JS对象转URL参数(原生JS和jQuery两种方式)
转自:点击打开链接 现在的js框架将ajax请求封装得非常简单,例如下面: $.ajax({ type: "POST", url: "some.php", da ...
- java基础之对象当做参数传进方法的堆栈内存解析
值类型当做参数传进方法: 引用类型对象当做参数传进方法: String字符串当做参数传进方法:
随机推荐
- vue的ref试用
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...
- GO语言Error处理
Go语言没有提供像Java.C#.Python语言中的try...catch异常处理方式,而是通过函数返回值逐层往上抛.好处就是避免漏掉本应处理的错误.坏处是代码啰嗦. 错误与异常区别 错误指的是可能 ...
- 【JVM】虚拟机类加载机制
什么是类加载 虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制. <[JVM]类文件结构& ...
- “都是为了生活”小组 选题 Scrum立会报告+燃尽图 01
作业要求参见:https://edu.cnblogs.com/campus/nenu/2019fall/homework/8683. 由于团队账号申请博客未通过网站审核,无法写博或加入班级,第一次立会 ...
- ls命令的简单实现
ls命令的简单实现 目标:简单的实现ls命令 实现的mic_ls命令主要功能 1.循环遍历目录 2.列出目标目录所有的子目录和文件 3.列出文件的文件权限,所有者,文件大小等详细信息 参数 -r 循环 ...
- PostgreSQL: Rename a User
Syntax The syntax to rename a user using the ALTER USER statement in PostgreSQL is: ALTER USER user_ ...
- linux下查看指定进程的所有连接信息(转)
定位某个进程的网络故障时经常需要用到的一个功能就是查找所有连接的信息.通常查找某个端口的连接信息使用 ss 或者 netstat 可以轻松拿到,如果是主动与别的机器建立的连接信息则可以通过 lsof ...
- 国人开发的api测试工具 ApiPost
挺好用的 ApiPost https://www.apipost.cn/download.html 需要注册,免费试用.感觉比postman好用
- Ionic4.x ion-refresher 下拉更新
官方文档:https://ionicframework.com/docs/api/refresher <ion-header> <ion-toolbar> <ion-ti ...
- IDEA 修改某个Module名称
一.选择module右键——>Refactor——>Rename 二.修改该module下的pom.xml文件对应module名改掉 三.修改项目的pom文件中modules里的modul ...