`

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

 

分享到:
评论

相关推荐

    什么是Python?Python有几种安装方法?.pdf

    什么是Python?Python有几种安装方法?.pdf

    Python 写的 虾米MP3下载器

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

    100个Python面试题及答案.docx

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

    Python self用法详解

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

    python窗口置顶

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

    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爬虫获取虾米音乐用户收藏所有歌单

    python 爬虫获取虾米音乐用户收藏所有歌单名并下载到csv文件,使用可以修改用户id,导入python使用的依赖包即可

    Python中的self用法详解

    在Python类中规定,函数的第一个参数是实例对象本身,并且约定俗成,把其名字写为self。其作用相当于java中的this,表示当前类的对象,可以调用当前类中的属性和方法。 class是面向对象的设计思想,instance(也即是...

    全面理解Python中self的用法

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

    python编程嵌套函数实例代码

    python,函数嵌套,到底是个什么东东? 很少有人用,但是,有时确实会用: def multiplier(factor): def multiplyByFactor(number): return number*factor return multiplyByFactor python程序,一个函数在另外...

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

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

    Python连连看小游戏源代码

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

    Python类中self参数用法详解

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

    详解Python self 参数

    在Python编程语言中,self参数是一个类实例方法中非常重要的部分。它是一个指向类的当前实例的引用,使得实例可以访问类中定义的属性和方法。本文将深入探讨Python中的self参数,并通过实例代码对这一概念进行详细...

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

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

    Python入门基础教程PPT全套资料.zip

    Python是一种广泛使用的高级编程语言,以其易读性、简洁的语法和强大的功能而闻名。作为初学者,了解Python的基础知识是十分重要的。本教程“Python入门基础教程PPT全套资料”旨在帮助新手快速掌握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