鱼C论坛

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

[已解决]可以用在init方法中定义函数吗?

[复制链接]
发表于 2018-7-19 17:25:42 | 显示全部楼层 |阅读模式

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

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

x
定义一个类的时候,其中一个方法的参数的默认值要用到实例的属性,一直报错,显示self is not defined,我认为应该是定义类的时候init方法还没调用,所以定义类的时候用init里定义的属性会报错
然后我就试着把那个函数在init方法里定义,定义类的时候没有报错。但是实例调用函数的时候找不到init里定义的那个函数,这是为什么?
最佳答案
2018-7-20 08:46:34
不要进入误区,没那个写法,你要明白什么是类,以及属性和方法,当然包括静态和普通,你这里用不到
你仔细看,方法调用类里面的普通字段的时候根本不需要在参数里面声明,以为已经在构造函数__init__
里面封装进去了,你直接在方法也就是函数里面用即可,b=self.length放在函数体里面,其他的逻辑我就
没看了,你主要是明白为什么要用类,不是为了用而用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-7-19 18:03:24 | 显示全部楼层
我还蛮好奇你想问什么,你能发下你的代码吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-19 18:58:13 | 显示全部楼层
本帖最后由 qw345tg 于 2018-7-19 19:05 编辑

class WordList(list):
    def __init__(self,value):
        self.wordlist=value
        self.length=len(self.wordlist)
        
   
    def append(self,word,a=0,b=self.length):
            ran=b-a
            if b-a==1:
                self.wordlist.insert[a+1,word]
                self.length+=1
                return None
            temp=ran//2+a
            listword=self.wordlist[temp]
            if min(listword,word)==word:
                a,b=a,temp
            else:
                a,b=temp,b
            self.append(word,a,b)


我说的就是把def append缩进,到init下面去

用的递归,就是一半一半缩小范围,单独拿出来用没问题
   
     
           
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-19 19:00:07 | 显示全部楼层
qw345tg 发表于 2018-7-19 18:58
class WordList(list):
    def __init__(self,value):
        self.wordlist=value

是想写个列表,改掉append,插入一个新单词的时候,像字典里那样按字母顺序排,问题在b=self.length那里,显示self is not defined
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-19 19:21:36 | 显示全部楼层
运运520 发表于 2018-7-19 18:03
我还蛮好奇你想问什么,你能发下你的代码吗?

我看到你在另外一个问题下的回答,应该就是这个问题,定义class的时候还没有self.length,我知道问题在哪,可是不知道怎么解决,把append的定义放到init下就是我想的办法,但好像没有用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-20 08:46:34 | 显示全部楼层    本楼为最佳答案   
不要进入误区,没那个写法,你要明白什么是类,以及属性和方法,当然包括静态和普通,你这里用不到
你仔细看,方法调用类里面的普通字段的时候根本不需要在参数里面声明,以为已经在构造函数__init__
里面封装进去了,你直接在方法也就是函数里面用即可,b=self.length放在函数体里面,其他的逻辑我就
没看了,你主要是明白为什么要用类,不是为了用而用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-20 11:01:24 | 显示全部楼层
运运520 发表于 2018-7-20 08:46
不要进入误区,没那个写法,你要明白什么是类,以及属性和方法,当然包括静态和普通,你这里用不到
你仔细 ...

确实有些为了用而用,但是那个是递归函数,放在函数体里的话就没法递归了,以后碰到类似问题怎么办呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-25 09:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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