selfPython 中这个词的目的是什么?我理解它指的是从该类创建的特定对象,但我不明白为什么它明确需要作为参数添加到每个函数.为了说明,在Ruby中我可以这样做:
class myClass
def myFunc(name)
@name = name
end
end
Run Code Online (Sandbox Code Playgroud)
我很容易理解.但是在Python中我需要包括self:
class myClass:
def myFunc(self, name):
self.name = name
Run Code Online (Sandbox Code Playgroud)
谁能跟我说说这个?这不是我在(无可否认的有限)经历中遇到的事情.
我正在学习Python编程语言,而且我遇到了一些我不太了解的东西.
在如下方法中:
def method(self, blah):
def __init__(?):
....
....
Run Code Online (Sandbox Code Playgroud)
怎么self办?这是什么意思?这是强制性的吗?
该__init__方法有什么作用?为什么有必要?(等等.)
我认为它们可能是OOP结构,但我不太了解.
为什么cls有时self在Python类中使用而不是作为参数?
例如:
class Person:
def __init__(self, firstname, lastname):
self.firstname = firstname
self.lastname = lastname
@classmethod
def from_fullname(cls, fullname):
cls.firstname, cls.lastname = fullname.split(' ', 1)
Run Code Online (Sandbox Code Playgroud) 如果我上课了......
class MyClass:
def method(arg):
print(arg)
Run Code Online (Sandbox Code Playgroud)
...我用来创建一个对象......
my_object = MyClass()
Run Code Online (Sandbox Code Playgroud)
......我就这样打电话method("foo")......
>>> my_object.method("foo")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: method() takes exactly 1 positional argument (2 given)
Run Code Online (Sandbox Code Playgroud)
...为什么Python告诉我我给了它两个参数,当我只给出一个?
在Python中定义类的方法时,它看起来像这样:
class MyClass(object):
def __init__(self, x, y):
self.x = x
self.y = y
Run Code Online (Sandbox Code Playgroud)
但是在其他一些语言中,例如C#,您可以使用"this"关键字引用该方法绑定的对象,而不将其声明为方法原型中的参数.
这是一个有意的语言设计决策在Python或是否有一些实现细节需要传递"自我"作为参数?
这是一些代码:
class Person
def initialize(age)
@age = age
end
def age
@age
end
def age_difference_with(other_person)
(self.age - other_person.age).abs
end
protected :age
end
Run Code Online (Sandbox Code Playgroud)
我想知道的是两者的区别@age,并self.age在age_difference_with方法.
可以写一些像:
class Test(object):
def _decorator(self, foo):
foo()
@self._decorator
def bar(self):
pass
Run Code Online (Sandbox Code Playgroud)
这失败了:@self中的自我是未知的
我也尝试过:
@Test._decorator(self)
Run Code Online (Sandbox Code Playgroud)
也失败了:测试未知
我想暂时更改装饰器中的一些实例变量,然后在更改它们之前运行装饰方法.
我通过一些pygame教程学习Python .
在那里我发现了关键字self的广泛使用,并且来自主要的Java背景,我发现我一直忘记键入self.例如,而不是self.rect.centerx我要输入rect.centerx,因为对我来说,rect已经是类的成员变量.
对于这种情况,我可以想到的Java并行是必须使用此前缀对成员变量的所有引用作为前缀.
我是否坚持使用self为所有成员变量添加前缀,或者有没有办法声明它们可以让我避免这样做?
即使我建议的不是pythonic,我仍然想知道它是否可能.
我已经看过这些相关的SO问题,但他们并没有完全回答我的想法:
我从未见过像这样的代码:
public static function getInstance()
{
if ( ! isset(self::$_instance)) {
self::$_instance = new self();
}
return self::$_instance;
}
Run Code Online (Sandbox Code Playgroud)
它是一样的new className()吗?
编辑
如果该类是继承的,它指向哪个类?
我有一个WPF Window,在某个地方有一个ListView我绑定List<string>到的地方.
现在在什么地方我ListView有一个TextBox和Content属性设置为{Binding}.
但这是速记.如何编写完整绑定以绑定到自身?
{Binding Path=Self}不起作用,也不起作用{Binding Self}(后者是前者的捷径).
self ×10
python ×7
class ×4
oop ×3
methods ×2
arguments ×1
binding ×1
data-binding ×1
decorator ×1
object ×1
php ×1
python-3.x ×1
ruby ×1
terminology ×1
wpf ×1