37讲
class MyClass:name = 'FishC'
def myFun(self):
print("Hello FishC")
>>> MyClass.myFun(self)
Traceback (most recent call last):
File "<pyshell#17>", line 1, in <module>
MyClass.myFun(self)
NameError: name 'self' is not defined
>>> MyClass.myFun("self")
Hello FishC
>>> MyClass.myFun("sf")
Hello FishC
求助大佬,
问题1
MyClass.myFun()
Traceback (most recent call last):
File "<pyshell#20>", line 1, in <module>
MyClass.myFun()
TypeError: myFun() missing 1 required positional argument: 'self' 开始调用说没有self报错后写入
MyClass.myFun(self)
Traceback (most recent call last):
File "<pyshell#17>", line 1, in <module>
MyClass.myFun(self)
NameError: name 'self' is not defined 为什么传入参数self报错,因为参数必须加双引号吗?????
问题2
MyClass.myFun("self")
Hello FishC
>>> MyClass.myFun("sf")
Hello FishC 为什么参数随便写都能调用,,,这个参数代表标识吗? 你这两个问题实际上是一个问题
你的困惑就是这个self是什么东西呗
给你写的类加点东西,方便将这个问题讲清楚
class MyClass:
name = 'FishC'
def myFun(self):
print("Hello FishC")
def fun2(self):
print(self.name)
现在这个类有两个方法,第一个方法没有用到self这个参数,第二个方法用到了self这个参数,写的是self.name
我们先说第一个方法,myFun(self),这个方法有一个参数,但是参数有什么意义不确定。那么这个方法也就不确定到底是类方法,还是类实例方法了。
若当做类方法,也就是你的这种调用方式:类名.方法名,那么self就是一个一般参数,就必须要传参数,但是参数是什么都无所谓,因为方法内没有用到该参数,所以对该参数没有任何要求;
若当做实例方法,那么调用方式:实例名.方法名,也就是需要先对该类实例化,然后用实例调用方法,这是self就是实例对象了,就不用传参数了
在来说第二个方法,fun2(self),这个方法也有一个参数self,这个参数已经固定了,因为在方法中有使用到self.name,所以self是一个该类的实例化对象,或者一个有name属性的对象。一般会被当做类实例方法,当然也可以当做类方法
若当做类方法,那么对self参数就有一定的要求,需要有name属性,否则就会报错;
若当做实例方法,那么就不用传参了,直接实例名.方法名
a=MyClass()
a.myFun()
MyClass.myFun('hh')
MyClass.myFun(a)
a.fun2()
MyClass.fun2(a)
MyClass.fun2('hhhhh')#这个会报错,因为字符串没有name属性
class bb:
name='这是一个测试'
MyClass.fun2(b())#这个也是可行的,因为class b有name这个属性
本帖最后由 myheartflyhigh 于 2020-8-30 10:49 编辑
问题1
TypeError: myFun() missing 1 required positional argument: 'self' 开始调用说没有self报错后写入
意思是缺少参数,并不是缺少self。你可以这样写 MyClass.myFun(1)。但是你写入的参数不能是一个没有定义的变量。
self不带引号的话是一个没有定义的变量,你需要对它进行定义,才能引用。self=1之后你再引用就没问题了。
另外“” 或者‘’代表的是字符串。所以‘self’或者“self”不是变量了,可以直接引用
sunrise085 发表于 2020-8-28 23:20
你这两个问题实际上是一个问题
你的困惑就是这个self是什么东西呗
谢谢大佬,最近耽误了学习,继续努力 myheartflyhigh 发表于 2020-8-30 10:35
问题1
TypeError: myFun() missing 1 required positional argument: 'self' 开始调用说没有self报 ...
谢谢鱼友
页:
[1]