python类中self的问题?

作者&投稿:茆菡 (若有异议请与网页底部的电邮联系)
python 类 self的问题~

在类中,self只能在函数中使用,表示的是实例属性,就是每个实例可以设置不值,而不相互影响。 如果在类级别使用没有self的属性,是类属性,一般作为全局变量来用的。 如果解决了您的问题请采纳! 如果未解决请继续追问!

self是对实例自己的引用。
self.a()的意思是"调用自己的过程a"。
试想,有定义一个函数a,同时,类中也有过程a,要区分两者,在类中就要通过是否使用self前缀来区分,在外部就要通过是否有实例名来区分。
参考以下代码:

原因都出在第4行这句: test3.count += 1 #!!!注意此处不是self.count
你每运行一次 init() 函数 count 就会累加一
注意 你累加的是 test3.count 而不是 self.count
所以 运行了三次 init() 函数 的输出是 1 2 3
如果 你累加的是 self.count 就会输出三次 1 1 1
***首先要理解上面所说的 再继续看下面的***
既然如此 print(cc3.count,cc4.count) #返回2,2 就是正确的
cc3.count 指向的 test3().count 输出的是 2 没异议是吧
cc4.count 指向的也是 test3().count 为什么不是 2 都是同一个东西
print(cc3.count,cc4.count) #返回3,6
前面第一个3 就不用多说了
后面的第二个6 是因为你 cc4.count=6 这句指定了他是6
比如 a = 6 输出a会是什么? 当然是6啊

Python编写类的时候,每个函数参数第一个参数都是self,一开始我不管它到底是干嘛的,只知道必须要写上。后来对Python渐渐熟悉了一点,再回头看self的概念,似乎有点弄明白了。

首先明确的是self只有在类的方法中才会有,独立的函数或方法是不必带有self的。self在定义类的方法时是必须有的,虽然在调用时不必传入相应的参数。

self名称不是必须的,在python中self不是关键词,你可以定义成a或b或其它名字都可以,但是约定成俗(为了和其他编程语言统一,减少理解难度),不要搞另类,大家会不明白的。

下例中将self改为myname一样没有错误:

class Person:
def _init_(myname,name):
myname.name=name
def sayhello(myname):
print 'My name is:',myname.name
p=Person('Bill')
print p
self指的是类实例对象本身(注意:不是类本身)。

class Person:
def _init_(self,name):
self.name=name
def sayhello(self):
print 'My name is:',self.name
p=Person('Bill')
print p
在上述例子中,self指向Person的实例p。 为什么不是指向类本身呢,如下例子:

class Person:
def _init_(self,name):
self.name=name
def sayhello(self):
print 'My name is:',self.name
p1=Person('Bill')
p2 = Person('Apple')
print p1
如果self指向类本身,那么当有多个实例对象时,self指向哪一个呢?

总结

self在定义时需要定义,但是在调用时会自动传入。

self的名字并不是规定死的,但是最好还是按照约定是用self

self总是指调用时的类的实例。

类中函数带上self,就可以调用你在初始化的时候所使用的变量




python中requese和Request有什么区别?
python是大小写敏感的,request估计是一个变量名,Request估计是一个类名。

Python中grid中sticky的作用是什么
sticky 意思是组件紧靠所在单元格的某一边角。取值有:“n”, “s”, “w”, “e”, “nw”, “sw”, “se”, “ne”, “center”(默认为” center”)

python 正则表达式中 re.match 如果在模式后面加上$符号,和re.searc
re.match是从字符串开头进行匹配,re.search可以在字符串任何位置匹配 import re find=re.match(r"world$","hello world")print(find)没有匹配,结果是None find=re.search(r"world$","hello world")print(find)匹配,返回一个MatchObject对象 ...

python中idle是什么
IDLE是Python(版本2.x或3.x)安装过程的用户自定义安装选项,IDLE是跟Python一起安装的,不过要确保安装时选中了“tcl\/tk”组件,准确地说,应该是不要取消该组件,因为默认该组件是处于选中状态的。IDLE是开发 python 程序的基本IDE(集成开发环境),具备基本的IDE的功能,是非商业Python开发的不错的...

Python连接mysql数据库及python使用mysqldb连接数据库教程
下载MySQL-python-1.2.5.zip 文件之后直接解压。进入MySQL-python-1.2.5目录: python setup.py install 三,测试 测试非常简单,检查MySQLdb 模块是否可以正常导入。 fnngj@fnngj-H24X:~\/pyse$ python Python 2.7.4 (default, Sep 26 2013, 03:20:56) [GCC 4.7.3] on linux2 Type "help", "copyright"...

大数据专业有哪些课程?
学的主要内容有:①JavaSE核心技术 ②Hadoop平台核心技术、Hive开发、HBase开发 ③Spark相关技术、Scala基本编程 ④掌握Python基本使用、核心库的使用、Python爬虫、简单数据分析;理解Python机器学习 ⑤大数据项目开发实战,大数据系统管理优化 ⑥云平台开发技术 整体来说,大数据课程知识点多,课程难度较大。

ubuntu中查看selinux状态
在Ubuntu 22.04 LTS版本中,若遇到查看selinux状态时出现报错情况,通常需要首先确保已正确安装了SELinux工具。请按照以下步骤操作,以解决查看SELinux状态的难题。首先,打开终端,执行以下命令以确保SELinux工具已安装:bash sudo apt-get update sudo apt-get install policycoreutils-python selinux-policy...

怎么使用java运行python脚本?
ScriptEngine engine = new ScriptEngineManager().getEngineByName("python");try { engine.eval(new FileReader(".\/script\/listing.py"));} catch(ScriptException se){ } catch(IOException ie){ } 或者参考:http:\/\/www.360doc.com\/content\/10\/0608\/23\/1404822_32043230.shtml 很久之前用过...

如何升级“python requirement already satisfied use”?
5. 运用setup从distutils.core而不是setuptools在setup.py工作太:#from setuptools import setup from distutils.core import setup 6. 这个工作(有它尚未安装):C:\\Users\\sesas>pip install python-dateutil Requirement already satisfied (use --upgrade to upgrade): python-dateutil in c:\\python...

世界上最流行、使用最广泛的高级程序设计语言有哪几个?
Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由SunMicrosystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaSE,JavaEE,JavaME)的总称。Java技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,...

新青区18579014402: python的init中的self问题具体是什么? -
郗凤鲑鱼: __init__()是类的构造函数,在建立对象时调用.self是对“对象”自身的引用.相当于c++中的this.python规定:访问类成员时,需要在前面加上this.这里,this.name = name表示为Person类添加了属性name.如果变量前不加this,则视为...

新青区18579014402: python中的类中属性元素加self.和不加self.的区别 -
郗凤鲑鱼: 在类中,self只能在函数中使用,表示的是实例属性,就是每个实例可以设置不值,而不相互影响.如果在类级别使用没有self的属性,是类属性,一般作为全局变量来用的.如果解决了您的问题请采纳!如果未解决请继续追问!

新青区18579014402: 对于Python的类的设计中,self的作用? -
郗凤鲑鱼: 你好:self是Python里面保留的一个关键字;在类中定义函数的时候,第一个参数尽量必须是self,但是在调用的时候不用管这个参数;说白了:self相当于this;

新青区18579014402: python中构建了一个类,在定义了一个函数时为什么括号第一个self有什么用,为什么不能给他赋值 -
郗凤鲑鱼: 对象调用方法时, 实际上是通过类调用的 a = muffedcalculator() a.calc(expr) 实际上是这样调用的 muffledcalculator.calc(a, expr) 这样self 就是 a, python隐含地把a 传进方法 替代了self, 就成了绑定的方法, 就可以执行了. 否则就是非绑定方法

新青区18579014402: Python的类中引用成员变量必须加self吗 -
郗凤鲑鱼: Python的类中引用成员变量必须加self 类(class)初始化之后会得到实例(instance). self就是用于代表初始化的到的实例. 明确地写一个self参数,使得类的方法(method)和普通的函数(function)本质上没有差异,所有的输入参数都显示地传递到方法/函数当中. 当然作为类的方法,作用的对.self是只有在类中才会有的.self在定义类的方法时是必须有的,虽然在调用时不必传入相应的参数. 但self的名称并不是一定的,在python中self不是关键词.在初始化函数中可以把self换成任意名字.

新青区18579014402: 我解释一下python的类方法为什么要写一个self参数 -
郗凤鲑鱼: self 表示类实例自身,相当于C++中的this 在类中用self可以引用类实例的成员,方法 如 class test: def printhello(self): print("hello") def output(self): self.printhello() output中就使用self调用了类本身的printhello方法

新青区18579014402: 如何理解并正确使用python中的self -
郗凤鲑鱼: 类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称,但是在调用这个方法的时候你不为这个参数赋值,Python会提供这个值.这个特别的变量指对象本身,按照惯例它的名称是self. 虽然你可以给这个参数任...

新青区18579014402: python子类继承父类,使用self报错,求大神指点 -
郗凤鲑鱼: 我的是python3;这里有两个问题:1、你继承的时候,为何跟父类的函数名都是“method”,除非的你想改写父类的这个函数“method”,若不是,就不要用同样的函数名;我这里把函数名改成了“method2”;2、调用父类的方法时,不要这样...

新青区18579014402: Python 方法中变量加self和不加的区别 -
郗凤鲑鱼: 如果加self,一个类中各个函数可以通过这个self联系起来,(在类函数里也加self)

新青区18579014402: Python为什么要self -
郗凤鲑鱼: 晚上特别针对Python的self查了一下,理理.Python要self的理由Python的类的方法和普通的函数有一个很明显的区别,在类的方法必须有个额外的第一个参数 (self ),但在调用这个方法的时候不必为这个参数赋值 (显胜于隐 的引发)....

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网