鱼C论坛

 找回密码
 立即注册
查看: 2001|回复: 10

[已解决]求助 python 关于 self 问题

[复制链接]
发表于 2018-5-3 15:26:49 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 铁岭小刚fishc 于 2018-5-3 16:30 编辑
  1. class BB:
  2.     def printBB():
  3.         print('no zuo no die')

  4. >>> bb =BB()
  5. >>> bb.printBB()
  6. Traceback (most recent call last):
  7.   File "<pyshell#3>", line 1, in <module>
  8.     bb.printBB()
  9. TypeError: printBB() takes 0 positional arguments but 1 was given
复制代码

===================================================
  1. class BB:
  2.     def printBB(abc):
  3.         print('no zuo no die')

  4. >>> bb = BB()
  5. >>> bb.printBB()
  6. no zuo no die
  7. >>>
复制代码


以上两段代码 一个 方法中没有参数,一个方法中被我传进去个 abc 做参数可以正常运行,这里第二种方法里面第一个参数不应该是  self 么?  为什么我传 abc 也正常运行呢?
最佳答案
2018-5-3 16:25:54
本帖最后由 追自由的风 于 2018-5-3 16:26 编辑
  1. #
  2. class BB:
  3.     def printBB():            #类中定义的函数,在不加装饰器的前提下,默认绑定给对象,所以括号内应该有个默认位置参数self(约定的,可以是x,可以是y)
  4.         print('no zuo no die')

  5. >>> bb =BB()  
  6. >>> bb.printBB()  #此处bb被自动传入---但是你在定义函数printB时,规定它是不需要参数的,所以报错
  7. Traceback (most recent call last):
  8.   File "<pyshell#3>", line 1, in <module>
  9.     bb.printBB()
  10. TypeError: printBB() takes 0 positional arguments but 1 was given
复制代码

  1. 我猜不报错的那次,你是这么写的
  2. class BB:
  3.     def printBB(abc):
  4.         print('no zuo no die')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-5-3 15:48:17 | 显示全部楼层
self不是固定的,用什么都可以,为了方便阅读代码,大多数人都会用self,
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-3 16:08:29 | 显示全部楼层
我怎么看你两个class定义一样呢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-3 16:25:54 | 显示全部楼层    本楼为最佳答案   
本帖最后由 追自由的风 于 2018-5-3 16:26 编辑
  1. #
  2. class BB:
  3.     def printBB():            #类中定义的函数,在不加装饰器的前提下,默认绑定给对象,所以括号内应该有个默认位置参数self(约定的,可以是x,可以是y)
  4.         print('no zuo no die')

  5. >>> bb =BB()  
  6. >>> bb.printBB()  #此处bb被自动传入---但是你在定义函数printB时,规定它是不需要参数的,所以报错
  7. Traceback (most recent call last):
  8.   File "<pyshell#3>", line 1, in <module>
  9.     bb.printBB()
  10. TypeError: printBB() takes 0 positional arguments but 1 was given
复制代码

  1. 我猜不报错的那次,你是这么写的
  2. class BB:
  3.     def printBB(abc):
  4.         print('no zuo no die')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-3 16:25:58 | 显示全部楼层
故梦L 发表于 2018-5-3 15:48
self不是固定的,用什么都可以,为了方便阅读代码,大多数人都会用self,

知道了 谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-3 16:29:40 | 显示全部楼层
BngThea 发表于 2018-5-3 16:08
我怎么看你两个class定义一样呢

啊 是我整错了 不好意思
我改一下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-3 16:30:16 | 显示全部楼层
BngThea 发表于 2018-5-3 16:08
我怎么看你两个class定义一样呢
  1. class BB:
  2.     def printBB():
  3.         print('no zuo no die')

  4. >>> bb =BB()
  5. >>> bb.printBB()
  6. Traceback (most recent call last):
  7.   File "<pyshell#3>", line 1, in <module>
  8.     bb.printBB()
  9. TypeError: printBB() takes 0 positional arguments but 1 was given
复制代码

===================================================
  1. class BB:
  2.     def printBB(abc):
  3.         print('no zuo no die')

  4. >>> bb = BB()
  5. >>> bb.printBB()
  6. no zuo no die
  7. >>>
复制代码


以上两段代码 一个 方法中没有参数,一个方法中被我传进去个 abc 做参数可以正常运行,这里第二种方法里面第一个参数不应该是  self 么?  为什么我传 abc 也正常运行呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-3 16:35:25 | 显示全部楼层

是的  复制代码复制错了  谢谢大神
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-3 16:36:07 | 显示全部楼层
铁岭小刚fishc 发表于 2018-5-3 16:30
===================================================

self只是习惯用法,并不是一定要用这个
参考下面的代码:
  1. >>> class A:
  2.         def tst(gg):
  3.                 gg.a = 1

  4.                
  5. >>> a = A()
  6. >>> a.tst()
  7. >>> a.a
  8. 1
  9. >>> b= A()
  10. >>> b.tst()
  11. >>> b.a
  12. 1
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-3 16:36:22 | 显示全部楼层
class BB:
    def printBB():            #类中定义的函数,在不加装饰器的前提下,默认绑定给对象,所以括号内应该有个默认位置参数self(约定的,可以是x,可以是y)
        print('no zuo no die')

>>> bb =BB()  
>>> bb.printBB()  #此处bb被自动传入---但是你在定义函数printB时,规定它是不需要参数的,所以报错
Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    bb.printBB()
TypeError: printBB() takes 0 positional arguments but 1 was given
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-3 16:41:29 | 显示全部楼层
BngThea 发表于 2018-5-3 16:36
self只是习惯用法,并不是一定要用这个
参考下面的代码:

懂了 谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-4 23:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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