为了账号安全,请及时绑定邮箱和手机立即绑定

Python类初始化函数__init__() 中哪些变量可以在该类的其他函数中调用?

#请教大神:

#    类的定义时,初始化函数 __init__ 里面的变量如何调用
#    正确的代码如下:
class Fib(object):
    def __init__(self, num):
        self.num = num
        a, b, L= 0, 1, [0]
        i = 1
        while i < self.num:
            i += 1
            b = a + b
            L.append(b)
            a = L[-2]
        self.v1 = L  # *<----这里写成 var1 = L 报错,这句话不写显示 [] , 0
        
    def __str__(self): 
        return str(self.v1)

    def __len__(self):
        return len(self.v1)
    
f = Fib(8)
print f
print len(f)

#     问题:1.)上面的__init__函数中,加*句我不写,为啥不可以?不理解里面怎么
#传递。。。初始化的时候不是先在内部调用了__init__,生成了L了吗? 下面函数不能用这
#里的L,甚至是 a,b这些变量?
#     2.)如果要让 __init__ 下的变量传到别的函数,是不是一定要用self.var这种形式?

#     我自己觉得 __init__ 里面的变量想要到下面的函数使用必须要 self.var这样赋予到这个
#实例对象的属性上,或者self.__var私有属性,总之在属性上,请大神指点


正在回答

2 回答

Python的内存管理采用自动回收机制,你例子中的a, b, L, i均为局部变量,在所属的function执行完毕后被自动回收,因此别的function不可能访问到已经被回收的变量。

而self.v1则不同,它是属于对象'self'的属性,只要对象存在,则属性就存在并共享

1 回复 有任何疑惑可以回复我~
#1

慕粉4083696 提问者

谢谢!但是比如在__str__等别的函数下,我想让局部变量被别的函数使用,我可以return这个变量,但是这个__init__它不能return变量,只能使变量变成属性才能被其他函数使用吗?
2016-10-10 回复 有任何疑惑可以回复我~

我刚也提了一个相关的问题,就是在__init__中并未传入numbers这个参数,但是却可以这样设置self.numbers这个属性,看了你们的回答,明白了,属性的改变可以从一开始就传值改变,也可以在__init__中临时附加,甚至猜测可以直接设置一个固有的属性。谢了

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
python进阶
  • 参与学习       255665    人
  • 解答问题       2949    个

学习函数式、模块和面向对象编程,掌握Python高级程序设计

进入课程

Python类初始化函数__init__() 中哪些变量可以在该类的其他函数中调用?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信