Python中self这个词的目的是什么?我知道它是指从该类创建的特定对象,但是我看不到为什么需要将它作为参数显式添加到每个函数中。为了说明这一点,在Ruby
中,我可以这样做:
class myClass
def myFunc(name)
@name = name
end
end
我很容易理解。但是在Python中,我需要包括self
:
class myClass:
def myFunc(self, name):
self.name = name
让我们看一个简单的向量类:
class Vector:
def __init__(self, x, y):
self.x = x
self.y = y
我们希望有一种计算长度的方法。如果我们想在类中定义它,它将是什么样?
def length(self):
return math.sqrt(self.x ** 2 + self.y ** 2)
当我们将其定义为全局方法/函数时,它应该是什么样?
def length_global(vector):
return math.sqrt(vector.x ** 2 + vector.y ** 2)
因此,整个结构保持不变。我该如何利用呢?如果暂时假设我们没有length为Vector类编写方法,则可以执行以下操作:
Vector.length_new = length_global
v = Vector(3, 4)
print(v.length_new()) # 5.0
之所以有效,是因为的第一个参数length_global可以用作中的self参数length_new。没有明确的指示,这将不可能self。
理解显式需求的另一种方法self是查看Python在何处添加了一些语法糖。当你牢记时,基本上,
v_instance.length()
在内部转换为
Vector.length(v_instance)
很容易看到self适合的位置。你实际上并没有用Python编写实例方法;你编写的是必须将实例作为第一个参数的类方法。因此,你必须将实例参数显式放置在某处。
问题内容: 我正在学习Python编程语言,遇到了一些我不太了解的东西。 用类似的方法: 怎么self办?这是什么意思?它是强制性的吗? 该方法有什么作用?为什么有必要?(等等。) 我认为它们可能是OOP构造,但我不太了解。 问题答案: 你是对的,这些是oop结构。 是一个类的构造函数。该self参数引用对象的实例(如thisC ++)。 分配对象的内存时将调用该方法: self如果要将值与对象持
问题内容: 为什么我不能执行以下操作: 我希望它能打印出来,因为我们用它覆盖了实例,但是它根本不做任何事情。甚至不会抛出错误。只是忽略分配。 我了解几乎没有任何人愿意这样做,但是您似乎做不到,这仍然很奇怪。 更新: 我现在知道 为什么 它不起作用,但是我仍然想知道是否有任何方法可以从实例中替换实例。 问题答案: 任何 简单的分配给 任何 的参数 任何 函数的行为确实是在Python以同样的方式:结
问题内容: 一般来说,一元代码在Python中应该做什么? 我问是因为到目前为止,我从未见过这样的情况: 通用对象在哪里实现。 所以我想知道:为什么和存在吗?您能否提供上面表达式计算结果为的真实示例? 问题答案: 这是该包中的“真实世界”示例:
问题内容: 我可以想到的对于Python类的每次使用,我都可以想到另一个同样(可能更多)可接受的解决方案,以实现相同的效果。例如: 在任何情况下,这都是最合适的解决方案吗?如果是这样,在什么情况下? 问题答案: 该函数是惰性的;它仅使用一项所需的内存。另一方面,和惯用法在内存中创建对象的n个副本。对于五个项目,乘法习惯用法可能更好,但是如果必须重复一百万次,您可能会注意到资源问题。 不过,很难想象
问题内容: 我从未见过这样的代码: 一样吗? 编辑 如果该类是继承的,它指向哪个类? 问题答案: 指向其编写所在的类。 因此,如果您的getInstance方法位于类名中,则以下行: 将做与: 编辑:评论后,还有更多信息。 如果您有两个相互扩展的类,则有两种情况: 在子类中定义 在父类中定义 第一种情况看起来像这样(在此示例中,我已经删除了所有不必要的代码-您必须将其重新添加来获得单例行为)*:
本文向大家介绍浅谈Python类中的self到底是干啥的,包括了浅谈Python类中的self到底是干啥的的使用技巧和注意事项,需要的朋友参考一下 Python编写类的时候,每个函数参数第一个参数都是self,一开始我不管它到底是干嘛的,只知道必须要写上。后来对Python渐渐熟悉了一点,再回头看self的概念,似乎有点弄明白了。 首先明确的是self只有在类的方法中才会有,独立的函数或方法是不必