QPe*_*ran -1 python oop python-3.x
我正在学习python类atm。在进行一些编码实验时,会出现一个问题:当我们使用在类中定义的函数时,第一个参数“默认”作为“自我”作为该对象传入。甚至我尝试重命名它或交换序列。第一个参数仍然执行为“自我”
这是python中的黄金法则吗?但为什么?
class people:
def __init__(self,name):
self.name=name
def test1(k):
return k.name
def test2(o):
print(o)
def test3(i,j):
print(i.name+j)
def test4():
print("test4")
def test5(m,self):
print(str(m)+self)
a=people('Dummy')
print(a.test1()) # "Dummy"
a.test2() # "<__main__.people object at REFFERENCE>"
a.test2("test2") # error:test2() takes 1 positional argument but 2 were given
a.test3("test3") # "Dummytest3"
a.test4() # error:test4() takes 0 positional arguments but 1 was given
a.test5("test5") # "<__main__.people object at REFFERENCE>test5"
Run Code Online (Sandbox Code Playgroud)
请参阅我的代码以供参考。我很好奇的是:
class MyClass {
public:
void myMethod(string test) {
cout << test;
}
};
int main() {
MyClass myObj;
string test = "testC++";
myObj.myMethod("testC++");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
首先,您无法更改它是错误的:您可以使用任意喜欢的参数名称。 self只是惯例,与this其他语言this类似-尽管有些语言具有预定义或保留词。
例如:
class Dummy():
def __init__(this):
this.name = "self"
this.value = 0
thing = Dummy()
print(thing.name, thing.value)
Run Code Online (Sandbox Code Playgroud)
输出:
self 0
Run Code Online (Sandbox Code Playgroud)
但是,Python 确实将第一个参数的语义强制用于任何实例方法:根据语言定义,该参数是调用该方法的实例。这样做可确保您可以在类中任何此类方法的已知稳定位置中随时访问调用实例。