鱼C论坛

 找回密码
 立即注册
查看: 1486|回复: 5

[已解决]总是提示函数未定义,什么情况?

[复制链接]
发表于 2018-7-31 11:23:08 | 显示全部楼层 |阅读模式

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

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

x
  1. # -*- coding: cp936 -*-
  2. class Fruit:
  3.     def __init__(self, *args):
  4.         for arg in args:
  5.             arg(self)
  6.    
  7.     def config(self, *args):
  8.         for arg in args:
  9.             arg(self)

  10.     def has_harvest(self):
  11.         self.harvest = True

  12.     def has_no_harvest(self):
  13.         self.harvest = False

  14.     def setColor(color):
  15.         def method(self):
  16.             self.color = color
  17.         return method

  18.     def can_eat(self):
  19.         self.eat = True

  20.     def can_notEat(self):
  21.         self.eat = False

  22. if __name__ == '__main__':
  23.     apple = Fruit(has_no_harvest(), setColor('green'))
  24.     print('苹果是否成熟:%s; 目前苹果的颜色:%s'%(apple.harvest, apple.color))
  25.     apple.config(has_harvest, setColor('red'), can_notEat)
  26.     print('苹果是否成熟:%s; 目前苹果的颜色:%s; 可以摘下来吃吗:%s'%(apple.harvest, apple.color, apple.eat))
  27.     apple.config(has_harvest, setColor('red'), can_eat)
  28.     print('苹果是否成熟:%s; 目前苹果的颜色:%s; 可以摘下来吃吗:%s'%(apple.harvest, apple.color, apple.eat))
复制代码

总是提示has_not_harvest NameError。按道理说已经定义了,可以正常运行啊。
最佳答案
2018-7-31 12:26:00
初始化实例化对象的时候
不能用该实例化对象的属性或方法去完成
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-7-31 12:25:30 | 显示全部楼层
has_not_harvest是作为全局变量成为类的参数的,自然在主程序中没有定义。如果还要按你的思路做,可以这样变通一下。
  1. # -*- coding: cp936 -*-
  2. class Fruit:
  3.     def __init__(self, *args, **kargs):
  4.         self.dict1 = {'has_no_harvest':self.has_no_harvest,'setColor':self.setColor} #没有写全
  5.         for arg in args:
  6.             self.dict1[arg]()
  7.         for k,v in kargs.items():
  8.             self.dict1[k](v)
  9.    
  10.     def config(self, *args):
  11.         for arg in args:
  12.             arg(self)

  13.     def has_harvest(self):
  14.         self.harvest = True

  15.     def has_no_harvest(self):
  16.         self.harvest = False

  17.     def setColor(self,color):
  18.         def method(self):
  19.             self.color = color
  20.         return method(self)

  21.     def can_eat(self):
  22.         self.eat = True

  23.     def can_notEat(self):
  24.         self.eat = False

  25. if __name__ == '__main__':
  26.     apple = Fruit('has_no_harvest', setColor='green')
  27.     print('苹果是否成熟:%s; 目前苹果的颜色:%s'%(apple.harvest, apple.color))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-31 12:26:00 | 显示全部楼层    本楼为最佳答案   
初始化实例化对象的时候
不能用该实例化对象的属性或方法去完成
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-31 14:38:14 | 显示全部楼层
冬雪雪冬 发表于 2018-7-31 12:25
has_not_harvest是作为全局变量成为类的参数的,自然在主程序中没有定义。如果还要按你的思路做,可以这样 ...

是因为在创建apple实例对象时,调用__init__()方法时,has_not_harvest方法还没有定义,是这样理解吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-31 14:59:37 | 显示全部楼层
本帖最后由 了解2号 于 2018-7-31 15:01 编辑
冬雪雪冬 发表于 2018-7-31 12:25
has_not_harvest是作为全局变量成为类的参数的,自然在主程序中没有定义。如果还要按你的思路做,可以这样 ...

我.png
这个是web开发学习实录这本书上的代码,不过确实是有问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-31 15:35:46 | 显示全部楼层
了解2号 发表于 2018-7-31 14:38
是因为在创建apple实例对象时,调用__init__()方法时,has_not_harvest方法还没有定义,是这样理解吗?

不是,是因为has_not_harvest作为一个标识符,在主程序中不知道它是什么。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-8 05:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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