luyantl 发表于 2020-8-30 22:21:25

小甲鱼视频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()

疾风怪盗 发表于 2020-8-30 22:37:50

class BB():

    def printBB(self):# 如果是   def printBB():
      # 括号内没有self,那么下边的BB.printBB() 不会报错,
      # 现在加了成为def print(self)后,反而报错,什么原因啊?
      # 如果还是想 要BB.printBB()运行,要怎么改?
      print('no zuo')

BB.printBB(self=BB)
这样好像可以,讲不出原理,需要版主来解释

1q23w31 发表于 2020-8-31 07:50:27

http://c.biancheng.net/view/4552.html
看这个,

阴阳神万物主 发表于 2020-8-31 09:10:35

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这个类就不会再有更多的实例化对象了。

wzdr 发表于 2020-8-31 09:53:27

{:10_249:}{:10_249:}

冰河星云 发表于 2020-8-31 17:00:04

因为没有加self

luyantl 发表于 2020-8-31 19:49:38

1q23w31 发表于 2020-8-31 07:50
http://c.biancheng.net/view/4552.html
看这个,

感谢,分享的链接很有用
页: [1]
查看完整版本: 小甲鱼视频python的类学习