`

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 写的 虾米MP3下载器

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

    详解Python self 参数

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

    100个Python面试题及答案.docx

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

    Python Basics A Self-Teaching Introduction_teaching_python_

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

    python试题python面试题目

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

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

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

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

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

    全面理解Python中self的用法

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

    python编程嵌套函数实例代码

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

    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

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

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

    python例句10000条

    Python是一种广泛使用的高级编程语言,以其易读性、简洁的语法和强大的功能而闻名。"python例句10000条"这个资源是学习Python语法和实践操作的理想材料,涵盖了Python的基础到进阶概念。这里我们将深入探讨其中的...

    Python语言开发学习PythonTurtle.zip

    PythonTurtle 是什么?PythonTurtle 主要目的是为使用 Python 语言进行软件开发提供低门槛的学习方式。初学者可以在内置的 Python ...PythonTurtle 完全是自包含(self-contained)的。 标签:PythonTurtle

    python使用serial模块,通过串口控制云台(基于PELCO-D协议)(csdn)————程序.pdf

    在本文中,我们将探讨如何使用Python的`pyserial`模块通过串口控制云台,具体是基于PELCO-D协议的通信。PELCO-D协议是一种广泛用于安防监控系统中的云台控制协议,它允许设备(如摄像头)接收并执行控制指令。 首先...

    详解Python pygame安装过程笔记

    今天看到一个教程,是关于Python安装pygame模块的。觉得很好,拿来分享一下。 安装Python 额,这个小题貌似在这里很是多余啊。但是为了照顾到刚刚学习Python的童鞋,我还是多啰嗦两句吧。 具体如下: 我们要到...

    Python库 | self_messages-8.0-py3-none-any.whl

    标题中的"Python库 | self_messages-8.0-py3-none-any.whl"指的是一个针对Python编程语言的库,名为`self_messages`,版本为8.0。这个库以`.whl`格式提供,这是一种预编译的Python软件包分发格式,用于简化安装过程...

Global site tag (gtag.js) - Google Analytics