小甲鱼视频python的类学习
python的第40节课中class BB:
def printBB(self): #如果是 def printBB(): 括号内没有self,那么下边的BB.printBB() 不会报错,现在加了成为def print(self)后,反而报错,什么原因啊?
#如果还是想 要BB.printBB()运行,要怎么改?
print('no zuo')
#BB.printBB()
bb=BB()
bb.printBB() class BB():
def printBB(self):# 如果是 def printBB():
# 括号内没有self,那么下边的BB.printBB() 不会报错,
# 现在加了成为def print(self)后,反而报错,什么原因啊?
# 如果还是想 要BB.printBB()运行,要怎么改?
print('no zuo')
BB.printBB(self=BB)
这样好像可以,讲不出原理,需要版主来解释 http://c.biancheng.net/view/4552.html
看这个, class BB:
def printBB(self):
print('no zuo')
#BB.printBB()
bb=BB()
bb.printBB()
1.
答:
BB.printBB() 是以类函数的形式去调用该函数,相当于include了一个库。
从对象方法的角度分析,因为 BB 的数据类型为 <class 'type'> ,所以在进行调用 BB 的函数的时候,它的 self 参数并没有分派给 printBB ,而是给了 'type' 旗下的 __dict__ ,于是乎 printBB 就没有接收到 self 参数,因为并没有给它任何可用的数据。
而 bb.printBB() 则是以对象方法的形式去调用该函数,bb 的数据类型为 <class 'BB'> ,所以在进行调用 BB 的函数的时候,它的 self 参数就分派给 printBB,故而可以正常执行。
2.
答:
若要 BB.printBB() 成功运行,则只用加一句 BB = BB() ,但是不建议这么做,因为一旦如此,名称冲突覆盖之下,BB这个类就不会再有更多的实例化对象了。 {:10_249:}{:10_249:} 因为没有加self 1q23w31 发表于 2020-8-31 07:50
http://c.biancheng.net/view/4552.html
看这个,
感谢,分享的链接很有用
页:
[1]