把变量作为类的变量好还是作为参数传递给类函数好?

把变量作为类的变量好还是作为参数传递给类函数好?

给我的感觉,好像这样:

[Copy to clipboard] [ - ]
CODE:
class xx:
           def __int__(self):
                      self.var = []
                      self.run(self.var)
           sef run(self, var):
                      do_sth_with_var

要比这样

[Copy to clipboard] [ - ]
CODE:
class xx:
           def __int__(self):
                      self.var = []
           sef run(self):
                      do_sth_with_self.var

快。

是不是第一种方法省去了在类空间里寻找变量所以会快些?不知大家有什么看法。
不要感觉,要有测试结果。

第一个只不过在初始化时候调用run方法而已,能看出哪儿能快的起来?
两者功能不同吧……第一个是建类就执行run(),第二个是随时调用……
不懂
功能上的不同可以在外部调用时弥补,我的主要问题是把变量作为参数直接传递给类函数快还是在类函数里调用类变量快?
那肯定是
class xx:
           def __int__(self):
                      self.var = []
           sef run(self):
                      do_sth_with_self.var
这个快,因为根本不执行run().


QUOTE:
原帖由 jjj137 于 2008-9-23 18:21 发表
那肯定是
class xx:
           def __int__(self):
                      self.var = []
           sef run(self):
                      do_sth_with_self.var
这个快,因为根本不执行run().

唉……看来我还是不写代码为好……从外部调用时这样不就好了?:
if "__name__"=="__main__":
     te = xx()
     te.run()
首先回答一下LZ的一个概念(个人理解)  LZ的写法是实例变量,不是类变量。   
类变量是这样的,而且是静态的
class Student   
     name="abc"   
实例的成员变量  
class Student   
    def __init__(self)        
         self.name = "abc"   
第二:这两种写法的快慢问题。肤浅的理解一下,应该都一样吧。而且我不知道Python的编译器是否会有优化处理,如果编译器有优化,这种代码应该是没有速度区别的。   
第三,到底是用参数,还是成员变量。我觉得应该从面向对象的理解来说。  
class Student:   
      def __init__(self):        
            self.name = "pumaboyd"   
       def run(self):         
             print "who run:",
             self.name  
if __name__== '__main__':      
      aobj = Student()      
      aobj.run()   
如果是这样,应该是成员变量的方式更合理。因为你实例化中应该已经明确的对象的名称。这个run的动作,就不需要在强调一遍ruan(username)这种方式了。当然在实际运用中,不能创建对象的时候就写死username,所以我觉得这个时候构造函数以参数的方式传入就很合理了。改进如下:   
class Student:   
     def __init__(self,name):        
           self.name = name   
     def run(self):         
           print "who run:",self.name  
if __name__== '__main__':     
     aobj = Student("pumaboyd")      
     aobj.run()   
这里备注一下,Python中有定义属性的方式。但我目前的感觉是使用成员变量来作为属性更方便。个人的一点体会,还请大家指点。

嗯,多谢楼上了~~尤其是对我的两个变量的更正~~

个人感觉上写成实例变量好像比较符合面向对象的特征。不过在有些追求效率的情况下应该怎么写呢?
根据这个: http://wiki.python.org/moin/Pyth ... e28281b9112afc36aa1

好像局部变量会快一些~