【问题标题】:Python self keyword: advantages and drawbacksPython self 关键字:优点和缺点
【发布时间】:2014-07-04 08:45:29
【问题描述】:

这2个类有什么区别(在性能和设计方面):

 class A:
        def methodA(self):
           self.a=10
           print(self.a)

还有:

 class B:
        def methodB(self):
           b=10
           print(b)

【问题讨论】:

  • 他们做的事情完全不同。 self 不是可选的,就像 Java 中的 this。参见例如this question。提示:将print(self.a)print(b) 移动到第二种方法,看看会发生什么!

标签: python-3.x


【解决方案1】:

第二个示例中的blocal variable,而不是class-instance (or static class) variable,所以对于第一个示例,您可以这样做:

o = A()
o.methodA()
print(o.a)

对于第二个示例,这会导致错误,并且变量 bmethodB() 完成后超出范围。

关于性能...默认情况下,实例变量是通过字典实现的:

>>> class A(object):
...     def __init__(self):
...         self.a = 5
...
>>> o = A()
>>> dir(o)
['__class__', '__delattr__', '__dict__', '__doc__', '__eq__', '__format__', '__g
e__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__',
'__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '_
_setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'a']
>>> o.__dict__
{'a': 5}
>>> o.__dict__.__class__
<class 'dict'>

所以每次访问基本上都像在做self.__dict__['a'],性能笔记here

【讨论】:

    猜你喜欢
    • 2017-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-06
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    相关资源
    最近更新 更多