鱼C论坛

 找回密码
 立即注册
查看: 1725|回复: 22

[已解决]类下面函数调用另外一个函数 为什么说没有定义

[复制链接]
发表于 2018-6-23 19:12:40 | 显示全部楼层 |阅读模式

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

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

x
class Start():
    def shezhi():
        
        global STR
        global INT
        
        
        
        
        
        print("请设置你的人物属性,一共有100%可以分配,你更希望你的角色更加着重体现在哪个方面?(力量 或 智力)")
        print("属性会影响到你在冒险中遇到难题的选择的结果")
        STR = int(input("设置力量所占 %"))
        INT = int(input("设置智力所占 %"))
        shuxing = STR + INT
        print("你设置的力量占比为:>%d \n你设置智力的占比为:>%d" %(STR,INT))
        
        open1()

    def open1():
        while True:
            if shuxing <= 100:
                避难所()                           

            else:
                print("设置有误,请返回重新设置")
                shezhi()

File "F:/Python/ex45 测试1.py", line 18, in shezhi
    open1()
NameError: name 'open1' is not defined

本意是在 def shezhi 里面设置好以后 转入下一个 def open1() 如果设置合理再进行到下一个场景 如果不合理则继续重返shezhi()继续设置

可是为什么设置完了以后 在打开open1()时 说open1没有定义呢

最佳答案
2018-6-26 11:46:06
taigefcxj 发表于 2018-6-26 10:43
感谢大佬的回复!

不客气,本人小白一枚 :)问题解决了吧

lz对类相关的知识ms不熟悉,建议看下老师相关的视频教程
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-6-23 19:16:01 | 显示全部楼层
如果不设置class 直接把函数放在外面  这样调用下一个函数就不会出现 没有定义 的情况  不知道哪里没注意 没做好 请大佬们指点批评 !
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-23 19:17:58 | 显示全部楼层
类里面调用的时候要写self.open()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-23 19:23:13 | 显示全部楼层
alltolove 发表于 2018-6-23 19:17
类里面调用的时候要写self.open()

感谢你的回复   刚才我去设置了 这次又提示self没有定义  感觉问题 可能是出现在self上   不知道什么时候该加 什么时候不加  请大佬指点!
错误代码 NameError: name 'self' is not defined
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-23 19:24:59 | 显示全部楼层
你那个open1()函数括号里也要有个self参数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-23 19:39:44 | 显示全部楼层
QQ图片20180623193409.png

大佬  你的意思是这样设置吗  

还是不行 代码是
  File "F:/Python/ex45 测试1.py", line 18, in shezhi
    self.open1()
NameError: name 'self' is not defined
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-23 20:58:44 | 显示全部楼层
hi 原因如下,代码中很多处都缺失了self,请参考

  1. class Start():
  2.     def shezhi(self):
  3.         
  4.         global STR
  5.         global INT
  6.         
  7.         
  8.         
  9.         
  10.         
  11.         print("请设置你的人物属性,一共有100%可以分配,你更希望你的角色更加着重体现在哪个方面?(力量 或 智力)")
  12.         print("属性会影响到你在冒险中遇到难题的选择的结果")
  13.         STR = int(input("设置力量所占 %:"))
  14.         INT = int(input("设置智力所占 %:"))
  15.         self.shuxing = STR + INT
  16.         print("你设置的力量占比为:>%d \n你设置智力的占比为:>%d" %(STR,INT))
  17.         
  18.         self.open1()

  19.     def open1(self):
  20.         while True:
  21.             if self.shuxing <= 100:
  22.                     print('属性小于100')
  23.                     break
  24.                 #避难所()                           

  25.             else:
  26.                 print("设置有误,请返回重新设置")
  27.                 self.shezhi()
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-23 22:06:03 | 显示全部楼层
thexiosi 发表于 2018-6-23 20:58
hi 原因如下,代码中很多处都缺失了self,请参考

感谢大佬的回复  感觉是自己没把 self搞明白 请问到底什么时候加 什么时候不加 

然后换成大佬的代码以后 还是出了一点小问题 
Traceback (most recent call last):
  File "<pyshell#55>", line 1, in <module>
    aa.shezhi(1)
  File "F:/Python/ex45 测试1.py", line 15, in shezhi
    self.shuxing = STR + INT
AttributeError: 'int' object has no attribute 'shuxing'

加了self以后 对shuxing 造成了什么改变 为什么值不可赋给他了呢?再次感谢大佬的回复
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-24 06:43:27 | 显示全部楼层
taigefcxj 发表于 2018-6-23 22:06
感谢大佬的回复  感觉是自己没把 self搞明白 请问到底什么时候加 什么时候不加 

然后换成大佬的代 ...

lz ,麻烦贴一下你的代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-24 10:18:49 | 显示全部楼层
thexiosi 发表于 2018-6-24 06:43
lz ,麻烦贴一下你的代码

class Start():
    def shezhi(self):
        
        global STR
        global INT
        
        
        
        
        print("这是一个废土背景的冒险游戏")
        print("请设置你的人物属性,一共有100%可以分配,你更希望你的角色更加着重体现在哪个方面?(力量 或 智力)")
        print("属性会影响到你在冒险中遇到难题的选择的结果")
        STR = int(input("设置力量所占 %"))
        INT = int(input("设置智力所占 %"))
        self.shuxing = STR + INT
        print("你设置的力量占比为:>%d \n你设置智力的占比为:>%d" %(STR,INT))
        
        self.open1()

    def open1(self):
        while True:
            if self.shuxing <= 100:
                break
                #避难所()                           

            else:
                print("设置有误,请返回重新设置")
                self.shezhi()

AttributeError: 'int' object has no attribute 'shuxing'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-24 11:44:44 | 显示全部楼层
taigefcxj 发表于 2018-6-24 10:18
class Start():
    def shezhi(self):
        

奇怪,我跑这些代码是正常的

有一个可能,内置函数int()被覆盖了,建议重新命名INT
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-24 12:17:31 | 显示全部楼层
thexiosi 发表于 2018-6-24 11:44
奇怪,我跑这些代码是正常的

有一个可能,内置函数int()被覆盖了,建议重新命名INT

还是不行 把INT的名字换了一个 还是出现一样的错误提示
AttributeError: 'int' object has no attribute 'shuxing'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-24 13:34:55 | 显示全部楼层
试了好多方法还是不行   
我的本意就是先设置好 2个变量 相当于你的人物属性  这两个变量会在接下来全局都用到
难道我这样的意图 不能用class def这样设置吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-25 09:14:45 | 显示全部楼层
taigefcxj 发表于 2018-6-24 13:34
试了好多方法还是不行   
我的本意就是先设置好 2个变量 相当于你的人物属性  这两个变量会在接下来全局都 ...

嗯嗯 理解

请lz把执行过程放上来,就是从实例化对象开始,到报错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-25 10:15:28 | 显示全部楼层
thexiosi 发表于 2018-6-25 09:14
嗯嗯 理解

请lz把执行过程放上来,就是从实例化对象开始,到报错

感谢大佬  这么多天还在帮助我解决问题!!

=================================================
代码
class Start():
    def shezhi(self):
        
        global STR
        global zhili
        
        
        
        
        print("这是一个废土背景的冒险游戏")
        print("请设置你的人物属性,一共有100%可以分配,你更希望你的角色更加着重体现在哪个方面?(力量 或 智力)")
        print("属性会影响到你在冒险中遇到难题的选择的结果")
        STR = int(input("设置力量所占 %"))
        zhili = int(input("设置智力所占 %"))
        self.shuxing = STR + zhili
        print("你设置的力量占比为:>%d \n你设置智力的占比为:>%d" %(STR,zhili))
        
        self.open1()

    def open1(self):
        while True:
            if self.shuxing <= 100:
                break
                #避难所()                                                            #调用的时候不需要加 class 或者def

            else:
                print("设置有误,请返回重新设置")
                self.shezhi()



=========================================================================
执行过程
================= RESTART: F:\Python\ex45 测试1.py =================
>>> aa=Start
>>> aa.shezhi(1)
这是一个废土背景的冒险游戏
请设置你的人物属性,一共有100%可以分配,你更希望你的角色更加着重体现在哪个方面?(力量 或 智力)
属性会影响到你在冒险中遇到难题的选择的结果
设置力量所占 %100
设置智力所占 %100
Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    aa.shezhi(1)
  File "F:\Python\ex45 测试1.py", line 15, in shezhi
    self.shuxing = STR + zhili
AttributeError: 'int' object has no attribute 'shuxing'
>>>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-25 11:00:01 | 显示全部楼层
taigefcxj 发表于 2018-6-25 10:15
感谢大佬  这么多天还在帮助我解决问题!!

=================================================

hi 原因如下

1. aa = Start()   #实例化对象时的语法格式错误

2. aa.shezhi()    #你的shezhi(self)函数无参数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-25 11:32:28 | 显示全部楼层
thexiosi 发表于 2018-6-25 11:00
hi 原因如下

1. aa = Start()   #实例化对象时的语法格式错误

感谢大佬的回复!!

=====================================
大佬的意思是实例化以后 调用 aa.shezhi() 不输入数字吗? 之前一直都随便输入一个 1
如果不输入 就是
>>> aa = Start
>>> aa.shezhi()
Traceback (most recent call last):
  File "<pyshell#7>", line 1, in <module>
    aa.shezhi()
TypeError: shezhi() missing 1 required positional argument: 'self'

如果输入一个数字就还是和以前一样

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-25 11:40:39 | 显示全部楼层
taigefcxj 发表于 2018-6-25 11:32
感谢大佬的回复!!

=====================================



另外,实例化语法是这样的,  aa = Start() , 你缺失了一个括号
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-6-25 15:14:44 | 显示全部楼层
这个这个调用根本不对。要买self.open()调用类自己方法。要么在方法前面加上@staticmethod
  1. @staticmethod
  2. def open1():
  3.     pass
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-6-26 10:43:09 | 显示全部楼层
thexiosi 发表于 2018-6-25 11:40


另外,实例化语法是这样的,  aa = Start() , 你缺失了一个括号

感谢大佬的回复!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 19:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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