`

Python的Self到底是虾米东东?

阅读更多

   

    先贴一段自己测试的代码,是用Python的dictionary实现的一个Hashmap。(Hash的实现方式以后再研究)

   

class HashC():
	def new(self, num_buckets=256):
		"""Initializes a Map with the given number of buckets."""
		aMap = []
		for i in range(0, num_buckets):
			aMap.append([])
		return aMap

	def hash_key(self, aMap, key):
		"""Given a key this will create a number and then convert it to
		an index for the aMap's buckets."""
		print hash(key)
		print len(aMap)
		print hash(key) % len(aMap)
		return hash(key) % len(aMap)

	def get_bucket(aMap, key):
		"""Given a key, find the bucket where it would go."""
		bucket_id = hash_key(aMap, key)
		return aMap[bucket_id]

	def get_slot(aMap, key, default=None):
		"""
		Returns the index, key, and value of a slot found in a bucket.
		Returns -1, key, and default (None if not set) when not found.
		"""
		bucket = get_bucket(aMap, key)

		for i, kv in enumerate(bucket):
			k, v = kv
			if key == k:
				return i, k, v

		return -1, key, default

	def get(aMap, key, default=None):
		"""Gets the value in a bucket for the given key, or the default."""
		i, k, v = get_slot(aMap, key, default=default)
		return v

	def set(aMap, key, value):
		"""Sets the key to the value, replacing any existing value."""
		bucket = get_bucket(aMap, key)
		i, k, v = get_slot(aMap, key)

		if i >= 0:
			# the key exists, replace it
			bucket[i] = (key, value)
		else:
			# the key does not, append to create it
			bucket.append((key, value))

	def delete(aMap, key):
		"""Deletes the given key from the Map."""
		bucket = get_bucket(aMap, key)

		for i in xrange(len(bucket)):
			k, v = bucket[i]
			if key == k:
				del bucket[i]
				break

	def list(aMap):
		"""Prints out what's in the Map."""
		for bucket in aMap:
			if bucket:
				for k, v in bucket:
					print k, v

test = HashC()
mymap = test.new()
test.hash_key(mymap, "a")			

   

 

Python要self的理由

Python的类的方法和普通的函数有一个很明显的区别,在类的方法必须有个额外的第一个参数 (self ),但在调用这个方法的时候不必为这个参数赋值显胜于隐 的引发)。Python的类的方法的这个特别的参数指代的是对象本身,而按照Python的惯例,它用self来表示。(当然我们也可以用其他任何名称来代替,只是规范和标准在那建议我们一致使用self)

 

例子说明:创建了一个类HachC,实例化HachC得到了test这个对象,然后调用这个对象的方法test.new(), test.hash_key(mymap, "a") ,这个过程中,Python会自动转为HachC.hash_key(test,arg1,arg2)

这就是Python的self的原理了。即使你的类的方法不需要任何参数,但还是得给这个方法定义一个self参数,虽然我们在实例化调用的时候不用理会这个参数不用给它赋值。

self在Python里不是关键字。self代表当前对象的地址。self能避免非限定调用造成的全局变量。

 

代码出处: http://learnpythonthehardway.org/book/ex39.html

解释引用: http://sjolzy.cn/Why-should-self-Python.html

 

分享到:
评论

相关推荐

    程序员小飞解密——纯新手的我,到底该把宝押在python2还是python3??

    程序员小飞解密——纯新手的我,到底该把宝押在python2还是python3??

    Python 写的 虾米MP3下载器

    在这个项目中,我们关注的是一个利用Python编写的虾米音乐下载器。虾米音乐是一个知名的在线音乐平台,提供丰富的音乐资源。然而,由于版权问题和平台政策,直接下载其音乐文件通常是不允许的。但通过编写特定的脚本...

    详解Python self 参数

    我们在使用 Python 中的 方法 method 时,经常会看到 参数中带有 self,但是我们也没对这个参数进行赋值,那么这个参数到底是啥意思呢? 2、知识点 2.1 成员函数(m) 和 普通方法(f) Python 中的 “类方法” 必须有一...

    100个Python面试题及答案.docx

    Python 面试题及答案 Python 是一种解释型语言,主要功能是动态语言、面向对象编程、函数式编程、胶水代码等。Python 中的列表和元组有什么区别?列表是可变的,可以添加、删除元素,而元组是不可变的。 Python ...

    Python self用法详解

    在Python的面向对象编程中,`self`是一个非常关键的概念,它是用来链接对象与对象方法的关键纽带。在定义类的实例方法或构造方法时,`self`参数是必不可少的,虽然Python并没有强制要求使用这个名字,但`self`已经...

    python窗口置顶

    python3.6.2写的窗口置顶程序,windows10下测试可用,用到tkinter,pypiwin32

    Python Basics A Self-Teaching Introduction_teaching_python_

    《Python Basics A Self-Teaching Introduction》是一本旨在引导初学者深入理解Python编程基础的教材。这本书涵盖了Python语言的核心概念,旨在帮助读者通过自学掌握Python编程。"teaching python"这个标签表明本书...

    python-3.90 文档 手册 中文版.chm

    Python 3.9.0 文档 欢迎!这里是 Python 3.9.0 的中文文档。 按章节浏览文档: Python 3.9 有什么新变化? 或显示自 2.0 以来的全部新变化 入门教程 从这里看起 标准库参考 放在枕边作为参考 语言参考 讲解...

    python试题python面试题目

    6. **Python中的self是什么?** `self`是一个指向对象本身的引用,常用于类的方法中,以便访问和修改对象的属性。例如: ```python class MyClass: def __init__(self, name): self.name = name def print_...

    实现两个设备之间的串口通信(python源程序)

    这是基于串口通信的python源程序,亲自调试没有问题。将自己PC通过串口连接其他PC或者兼容串口通信的设备或者传感器,可以读取到对方发送的数据。注意第一次发送的cmd地址指令集中的数据要符合自己的报文通信格式。

    python 中-self-标识符和self标识符.docx

    在Python编程语言中,`self`和`__self__`都是与对象和方法相关的概念,但它们的作用和使用场景略有不同。本文将深入探讨这两个标识符的区别及其在Python中的作用。 首先,`self`是一个约定俗成的参数,通常在定义类...

    Python兼容Java bouncycastle包的国密sm2加解密方法

    在Java世界中,使用bouncycastle进行SM2操作相对简单,但当需要在Python中实现相同功能时,情况可能会复杂一些,因为Python的标准库没有内置对SM2的支持。 首先,我们需要一个Python库来处理SM2算法。目前,有如`...

    Python中的self用法详解

    在Python编程语言中,`self` 是一个非常关键的概念,特别是在面向对象编程中。`self` 关键字是用来引用类的实例对象的,它在类的定义中扮演着类似Java中的`this`的角色。理解`self`的用法对于编写复杂的Python程序至...

    浅谈Python类中的self到底是干啥的

    在Python编程语言中,类是创建对象的基础,而`self`是一个特殊参数,它在类的方法中扮演着至关重要的角色。本文将深入探讨`self`的含义、作用以及如何在实际编程中正确使用它。 首先,`self`并非Python的保留关键字...

    全面理解Python中self的用法

    在Python编程语言中,`self` 是一个非常关键的概念,特别是在类(class)的定义和对象(instance)的创建中。`self` 关键字在Python中用来引用类的实例,它是一个指向对象本身的引用,使得我们可以从类的方法中访问...

    Python连连看小游戏源代码

    **Python连连看小游戏源代码详解** 在编程领域,制作小游戏是一种常见的学习和实践方式,而“连连看”作为一款广受欢迎的休闲游戏,其Python实现更是吸引了许多初级和中级开发者。这个项目是基于Python语言构建的,...

    Python类中self参数用法详解

    在Python编程中,类是创建对象的蓝图,而self是一个非常关键的概念,它与类的方法密切相关。本文将详细解释Python类中self参数的用法及其重要性。 首先,self是Python类方法的一个特殊参数,它总是作为方法的第一个...

    用 Python 从头实现一个神经网络(附代码)

    在本教程中,我们将深入探讨如何使用 Python 从零开始构建一个简单的神经网络。神经网络是一种受生物神经元结构启发的计算模型,广泛应用于机器学习和人工智能领域,如图像识别、自然语言处理等。Python 作为一门易...

    Python库 | python_purify-1.0.0.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:python_purify-1.0.0.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

Global site tag (gtag.js) - Google Analytics