鱼C论坛

 找回密码
 立即注册
查看: 1330|回复: 6

[已解决]小甲鱼视频python的类学习

[复制链接]
发表于 2020-8-30 22:21:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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-31 09:10:35
  1. class BB:
  2.    def printBB(self):
  3.        print('no zuo')

  4. #BB.printBB()

  5. bb=BB()
  6. 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这个类就不会再有更多的实例化对象了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-8-30 22:37:50 | 显示全部楼层
  1. class BB():

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

  7. BB.printBB(self=BB)
复制代码

这样好像可以,讲不出原理,需要版主来解释
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-31 07:50:27 | 显示全部楼层
http://c.biancheng.net/view/4552.html
看这个,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-8-31 09:10:35 | 显示全部楼层    本楼为最佳答案   
  1. class BB:
  2.    def printBB(self):
  3.        print('no zuo')

  4. #BB.printBB()

  5. bb=BB()
  6. 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这个类就不会再有更多的实例化对象了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-8-31 09:53:27 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-8-31 17:00:04 | 显示全部楼层
因为没有加self
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-8-31 19:49:38 | 显示全部楼层
1q23w31 发表于 2020-8-31 07:50
http://c.biancheng.net/view/4552.html
看这个,

感谢,分享的链接很有用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-9 07:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表