python中class什么意思_【转载】在python的class中的,self到底是什么?
答案:self可以理解为一个字典变量,内部存的就是对象的数据属性。如:{'name':'zhang','age':'18'}就是这些。
注意只有数据属性,并没有创建新的类的方法。 类----->通过实例化生成----对象---->(对象只是一串类似于字典的数据,没有把类的里的方法复制给你,python没有new这个方法!)
在python2中分为
经典类:
class Box:
pass
新式类:
class Box(object):
pass
在python3中,只有新式类:
class Box:
pass
在python的class中的,self到底是什么?
上实例:
class.py
1 class Box:
2 def __init__(self, boxname, size, color):
3 self.boxname = boxname
4 self.size = size
5 self.color = color # self就是用于存储对象属性的集合,就算没有属性self也是必备的
6
7 def open(self, myself):
8 print('-->用自己的myself,打开那个%s,%s的%s' % (myself.color, myself.size, myself.boxname))
9 print('-->用类自己的self,打开那个%s,%s的%s' % (myself.color, myself.size, myself.boxname))
10
11 def close(self):
12 print('-->关闭%s,谢谢' % self.boxname)
13
14
15 b = Box('魔盒', '14m', '红色')
16 b.close()
17 b.open(b) # 本来就会自动传一个self,现在传入b,就会让open多得到一个实例对象本身,print看看是什么。
18 print(b.__dict__) # 这里返回的就是self本身,self存储属性,没有动作。
以上代码当中:
self 就是 对象/实例 属性的集合,
他们之间的关系如下:
1、Box是个类 ——》实例化——》b 对象/实例
2、Box类python中显示为: (接下一行)
——》实例化:b=Box('魔盒', '14m', '红色') (接下一行)
——》得到对象/实例b,显示为<__main__.Box object at 0x00000233857AA518>
3、抽象体(接下一行)
——》实例的过程(接下一行)
——》得对对象,含有属性:{'boxname': '魔盒', 'size': '14m', 'color': '红色'},即self。
self看似是一整个对象,实际上描述明白一个类就是生产对象的过程,描述了self就是得到了对象。所以self内的健值可以直接使用。
正如自然界中,一个有效的对象,必须包括:1、描述对象的属性;2、对象的方法。
所以self是必须的,也是对象中重要的特性。
当掌握了这个原理以后,我们试试以下的代码,感觉更加神奇。让我们明白重要的是它的思路:
class02.py
class Box:
def myInit(mySelf, boxname, size, color):
mySelf.boxname = boxname
mySelf.size = size
mySelf.color = color # 自己写一个初始化函数,一样奏效,甚至不用self命名。其它函数当中用标准self
return mySelf # 返回给实例化过程一个对象!神奇!并且含有对象属性/字典
# def __init__(self, boxname, size, color):
# self.boxname = boxname
# self.size = size
# self.color = color #注释掉原来标准的初始化
def open(self, myself):
print(self)
print('-->用自己的myself,打开那个%s,%s的%s' % (myself.color, myself.size, myself.boxname))
print('-->用类自己的self,打开那个%s,%s的%s' % (myself.color, myself.size, myself.boxname))
def close(self):
print('-->关闭%s,谢谢' % self.boxname)
# 经过改造,运行结果和标准初始化没区别
b = Box().myInit('魔盒', '14m', '红色')
# b = Box('魔盒', '14m', '红色')#注释掉原来标准的初始化方法
b.close()
b.open(b) # 本来就会自动传一个self,现在传入b,就会让open多得到一个实例对象本身,print看看是什么。
print(b.__dict__) # 这里返回的就是self本身,self存储属性,没有动作。
换个角度来讲,
对类的操作有:1、定义属性 2、调节方法的选项
——》在适当的设置以后《———
类对的反馈有:1、得到属性 2、执行方法
在类的函数当中,self为什么是必要参数,因为他是对象的载体,可以理解成一个字典。
通过以下代码演示:
1 class Box:
2 def myInit(mySelf, boxname, size, color):
3 print(mySelf.__dict__)#显示为{}空字典
4 mySelf.boxname = boxname
5 mySelf.__dict__['aa'] = 'w'#甚至可以像字典一样操作
6 mySelf.size = size
7 mySelf.color = color # 自己写一个初始化函数,一样奏效,甚至不用self命名。其它函数当中用标准self
8 return mySelf # 返回给实例化过程一个对象!神奇!并且含有对象属性/字典
9
10 # def __init__(self, boxname, size, color):
11 # self.boxname = boxname
12 # self.size = size
13 # self.color = color #注释掉原来标准的初始化
14
15 def open(self, myself):
16 print(self)
17 print('-->用自己的myself,打开那个%s,%s的%s' % (myself.color, myself.size, myself.boxname))
18 print('-->用类自己的self,打开那个%s,%s的%s' % (myself.color, myself.size, myself.boxname))
19
20 def close(self):
21 print('-->关闭%s,谢谢' % self.boxname)
22
23
24 # 经过改造,运行结果和标准初始化没区别
25
26 b = Box().myInit('魔盒', '14m', '红色')
27 # b = Box('魔盒', '14m', '红色')#注释掉原来标准的初始化方法
28 b.close()
29 b.open(b) # 本来就会自动传一个self,现在传入b,就会让open多得到一个实例对象本身,print看看是什么。
30 print(b.__dict__) # 这里返回的就是self本身,self存储属性,没有动作。
执行结果
{}
-->关闭魔盒,谢谢
<__main__.Box object at 0x0000026A2CBAA5F8>
-->用自己的myself,打开那个红色,14m的魔盒
-->用类自己的self,打开那个红色,14m的魔盒
{'boxname': '魔盒', 'aa': 'w', 'size': '14m', 'color': '红色'}
注意看:'aa':'w' ,成功设置完成
python中class什么意思_【转载】在python的class中的,self到底是什么?相关推荐
- python数据框常用操作_转载:python数据框的操作
我们接着上次分享给大家的两篇文章:Python数据分析之numpy学习(一)和Python数据分析之numpy学习(二),继续讨论使用Python中的pandas模块进行数据分.在接下来的两期pand ...
- [转载] python中for语句用法_详解Python中for循环的使用_python
参考链接: 在Python中将else条件语句与for循环一起使用 这篇文章主要介绍了Python中for循环的使用,来自于IBM官方网站技术文档,需要的朋友可以参考下 for 循环 本系列前面 &q ...
- [转载] python中的且语句_简单探讨python中的语句和语法
参考链接: 在Python中解包:并行分配之外 python程序结构 python"一切皆对象",这是接触python听到最多的总结了.在python中最基层的单位应该就是对象了, ...
- [转载] python判断字符串中包含某个字符串_干货分享| Python中最常用的字符串方法
参考链接: Python中字符串string capitalize 字符串是字符序列.Python中内置的string类代表基于Unicode国际字符集的字符串.除了Python中常见的操作外,字符串 ...
- 此上下文中不支持函数定义。请在代码文件中创建函数。_深入解析Python上下文管理器,让你不再迷茫!...
1. 上下文管理器 一个类只要实现了 __enter__() 和 __exit__() 这个两个方法,通过该类创建的对象我们就称之为上下文管理器. 上下文管理器可以使用 with 语句,with语句之 ...
- python如何初始化对象数组_如何理解Python中的面向对象编程?
(由Python大本营付费下载自视觉中国) 作者 | Radek Fabisiak 译者 | 弯月,责编 | 郭芮 出品 | CSDN(ID:CSDNnews) 现如今面向对象编程的使用非常广泛,本文 ...
- python向数据库写入数据_如何用Python向Mysql中插入数据
我们使用Python经常会和Postgresql进行搭配,很少将python和mysql进行搭配.下面小编给大家分享如何用Python向Mysql中插入数据. 工具/原料 Pycharm 方法/步骤 ...
- python中的列表理解_掌握『Python列表理解』需要知道的9件事,你知道了吗?
越来越多的人开始学习Python,它已经成为最流行的编程语言之一,这几乎发生在所有领域.比如网络开发.科学计算,当然还有人工智能. 无论想用python干什么,都绕不开学习Python的数据结构.变量 ...
- python各个关键词的意思_想学好Python,你必须了解Python中的35个关键词
每种编程语言都会有一些特殊的单词,称为关键词.对待关键词的基本要求是,你在命名的时候要避免与之重复.本文将介绍一下Python中的关键词.关键词不是内置函数或者内置对象类型,虽然在命名的时候同样也最好 ...
- python如何创建工程预设_如何在sublime3项目设置中设置python模块的搜索路径?ImportError: No module named *的解决办法...
问题:之前使用pycharm,用的挺溜,但是电脑配置实在不争气,pycharm启动久了,耗去大量内存,导致运行起来越来越慢,于是转向使用sublime text. 把项目从pycharm切换到subl ...
最新文章
- 在Python源中使用UTF-8编码[重复]
- linux我ll查不到usr,Linux学习-文件查寻
- WPF 实现一个酷酷的Loading
- java基础的知识点(一)
- 【java】java ReentrantLock 源码详解
- RSYNC安装使用详解
- POJ 1095 Trees Made to Order
- UVA12190 Electric Bill【二分搜索】
- java 迭代器_Java中 ( Iterator ) 迭代器 详解 ( JDK8源码 )
- java lucene 站内搜索_完整的站内搜索Demo(Lucene.Net+盘古分词)
- unity的立方贴图
- 人生如常,常亦无常,亦无进,茫然终身,谓常
- java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType
- 读《大数据时代》有感
- 物联网推进水产养殖业标准化规模化进程
- python3封装微信分账功能
- html中 选择子元素 子元素选择器
- 后端返回amr格式音频前端处理播放播放(个人笔迹)
- malloclab 实验详解(动态分配器如何设计)
- Development Build:
热门文章
- virtualenv
- IOS Window窗口使用
- Shell编程 之 while循环 和 until循环 和 总结
- bzoj 2600: [Ioi2011]ricehub
- 【Android基础】页面跳转与传值(Activity跳转与传值)
- 关于mount nfs时-o nolock的问题
- STL里面的sort()函数使用结构体
- 大数据之-Hadoop三大发行版本---大数据之hadoop工作笔记0010
- 大数据之-入门_大数据部门业务流程分析---大数据之hadoop工作笔记0006
- 大数据_Hbase-(数据写入流程)---Hbase工作笔记0009