python中定义class时self的理解

很多人都对self的作用不理解,觉得多余,实际上self大有其用。

先给出一个实例:

1 >>> class a_class:
2     def func(self):
3         print(self)
4         print(self.__class__)
5
6 >>> a= a_class()
7 >>> a.func
8 <bound method a_class.func of <__main__.a_class object at 0x0000000003414C18>>

其实7、8行的效果等同于如下:

1 >>> a_class.func(a)
2 <__main__.a_class object at 0x0000000003414C18>
3 <class ‘__main__.a_class‘>
4 >>> 

明白了吧,a_class.func(a)等同于,a=a_class();a.func()

所以,self就是实例的本身,即self 就是 实例a,所以self就代表外界钏如一个参数,可以新建一个实例。

时间: 2024-11-09 17:09:52

python中定义class时self的理解的相关文章

python中定义函数时,self怎么理解:

在定义方法的时候有一个self参数,在所有的方法声明中都要用到这个参数,这个参数代表实例对象本身,当你用实例调用方法的时候, 由解释器自动的把实例对象本身悄悄的传递给方法,不需要你自己传递self进来,例如有一个带有两个参数的方法,你所有调用只需要传递进来二个参数. 例如这两个文件: 文件名: test.py class A: def  abc(self,a,b): a=a+1 b=b+1 文件名: test2.py import A A.abc(1,2) print a,b test2.py中

Python中定义字符串和修改字符串的原理

   Python是用C语言开发的,在C语言中是没有字符串的概念,只有字符和字符数组,一般用字符数组表示字符串,所以在Python中定义一个字符串时,其实就是在内存中开辟一块空间, 例如: 定义一个字 符串string1=hello  --------->5个字符 字符数组['h','e','l','l','o'],其在内存中存储的位置为:['h','e','l','l','o'] 而如果想要修改该字符串为hellosb,在需要在内存中重新开辟一块数据空间为:['h','e','l','l','

Python 中 if __name__ == &#39;__main__&#39; 的正确理解

程序入口 对于很多编程语言来说,程序都必须要有一个入口,比如 C,C++,以及完全面向对象的编程语言 Java,C# 等.如果你接触过这些语言,对于程序入口这个概念应该很好理解,C 和 C++ 都需要有一个 main 函数来作为程序的入口,也就是程序的运行会从 main 函数开始.同样,Java 和 C# 必须要有一个包含 Main 方法的主类来作为程序入口. 而 Python 则有不同,它属于脚本语言,不像编译型语言那样先将程序编译成二进制再运行,而是动态的逐行解释运行.也就是从脚本第一行开始

在php中定义常量时,const与define的区别

[问]在php中定义常量时,const与define的区别? [答]使用const使得代码简单易读,const本身就是一个语言结构,而define是一个函数.另外const在编译时要比define快很多. (1).const用于类成员变量的定义,一经定义,不可修改.define不可用于类成员变量的定义,可用于全局常量. (2).const可在类中使用,define不能. (3).const不能在条件语句中定义常量. 例如: if (...){ const FOO = 'BAR';  // 无效的

python进阶三(面向对象编程基础)【3-4 python中定义类方法】

python中定义类方法 和属性类似,方法也分实例方法和类方法. 在class中定义的全部是实例方法,实例方法第一个参数 self 是实例本身. 要在class中定义类方法,需要这么写: 1 class Person(object): 2 count = 0 3 @classmethod 4 def how_many(cls): 5 return cls.count 6 def __init__(self, name): 7 self.name = name 8 Person.count = P

python进阶三(面向对象编程基础)【3-3 python中定义实例方法】

python中定义实例方法 一个实例的私有属性就是以__开头的属性,无法被外部访问,那这些属性定义有什么用? 虽然私有属性无法从外部访问,但是,从类的内部是可以访问的.除了可以定义实例的属性外,还可以定义实例的方法. 实例的方法就是在类中定义的函数,它的第一个参数永远是 self,指向调用该方法的实例本身,其他参数和一个普通函数是完全一样的: 1 class Person(object): 2 3 def __init__(self, name): 4 self.__name = name 5

Python中什么是变量Python中定义字符串

在Python中,变量的概念基本上和初中代数的方程变量是一致的. 例如,对于方程式 y=x*x ,x就是变量.当x=2时,计算结果是4,当x=5时,计算结果是25. 只是在计算机程序中,变量不仅可以是数字,还可以是任意数据类型. 在Python程序中,变量是用一个变量名表示,变量名必须是大小写英文.数字和下划线(_)的组合,且不能用数字开头 例如 : 在Python中,等号=是赋值语句,可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变量,例如:  这种变量本身类型不固

python中定义函数和参数的传递问题

作者:達聞西链接:https://zhuanlan.zhihu.com/p/24162430来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 5.2.4 函数.生成器和类 还是从几个例子看起: def say_hello(): print('Hello!') def greetings(x='Good morning!'): print(x) say_hello() # Hello! greetings() # Good morning! greetings("Wh

在python中定义二维数组

发表于 http://liamchzh.0fees.net/?p=234&i=1 一次偶然的机会,发现python中list非常有意思. 先看一段代码 [py]array = [0, 0, 0]matrix = [array*3]print matrix## [[0,0,0,0,0,0,0,0,0]][/py] 这段代码其实没有新建一个二维数组 再看一段代码 [py]array = [0, 0, 0]matrix = [array] * 3print matrix## [[0, 0, 0], [