如何在Python中避免显式的“自我”?

发布于 2021-01-29 14:55:29

我通过遵循一些pygame教程来学习Python 。

在其中我发现了关键字 self的 广泛使用,并且主要来自Java背景,我发现自己一直忘记键入 self
。例如,代替self.rect.centerx我输入rect.centerx,因为对我来说, rect 已经是该类的成员变量。

Java的并行的我能想到的这种情况是有前缀成员变量的所有引用与

我是否在所有成员变量前面都加上了 self 前缀,还是有一种方法可以声明它们,而不必这样做呢?

即使我的建议不是 pythonic ,我仍然想知道是否有可能。

我看了这些相关的SO问题,但是它们并不能完全回答我的要求:

关注者
0
被浏览
115
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    Python需要指定self。
    结果是,即使没有可见的完整类定义,也永远不会对什么是成员和什么不是成员感到困惑。这会导致有用的属性,例如:您不能添加意外遮蔽非成员并从而破坏代码的成员。

    一个极端的例子:您可以在不知道类可能具有什么基类的情况下编写类,并且始终知道您是否正在访问成员:

    class A(some_function()):
      def f(self):
        self.member = 42
        self.method()
    

    这就是 完整的 代码!(some_function返回用作基础的类型。)

    另一个是动态组合类的方法的:

    class B(object):
      pass
    
    print B()
    # <__main__.B object at 0xb7e4082c>
    
    def B_init(self):
      self.answer = 42
    def B_str(self):
      return "<The answer is %s.>" % self.answer
    # notice these functions require no knowledge of the actual class
    # how hard are they to read and realize that "members" are used?
    
    B.__init__ = B_init
    B.__str__ = B_str
    
    print B()
    # <The answer is 42.>
    

    记住,这两个例子都是极端的,您不会每天看到它们,我也不建议您经常编写这样的代码,但它们确实显示了明确要求自我的各个方面。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看