Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果给定相同的名称,python类中的属性会改变值吗?_Python_Oop - Fatal编程技术网

如果给定相同的名称,python类中的属性会改变值吗?

如果给定相同的名称,python类中的属性会改变值吗?,python,oop,Python,Oop,我正在学习Python OOP编程,并运行以下小脚本: class Employee: def __init__(self, first, last): self.first = first self.last = last emp1 = Employee("Fede", "Cuci") print emp1.first print emp1.last 一切都很顺利,直到我注意到,当我创建了一个具有相同属性的方法并将其打印出来时,它会采用这些值:

我正在学习Python OOP编程,并运行以下小脚本:

class Employee:

    def __init__(self, first, last):

        self.first = first
        self.last = last

emp1 = Employee("Fede", "Cuci")

print emp1.first
print emp1.last
一切都很顺利,直到我注意到,当我创建了一个具有相同属性的方法并将其打印出来时,它会采用这些值:

class Employee:

    def __init__(self, first, last):

        self.first = first
        self.last = last

    def fullname(self, first, last):

        self.first = first
        self.last = last

    def other_fullname(self, first, last):

        self.first = first
        self.last = last


emp1 = Employee("Fede", "Cuci")
emp1.fullname("Fede2", "Cuci2")
emp1.other_fullname("Fede3", "Cuci3")

print emp1.first
print emp1.last
然后我注意到它总是打印出最后一个调用的方法。这是否意味着您应该在每个类中对属性进行不同的命名,并使用这种技术来更新属性的值,还是我在代码中做了一些错误的事情

我认为,通过在每个方法中放入
“self”
,将使该属性对该特定方法唯一,而不是如果我再次尝试打印该属性,它将根据我上次调用的方法更新其值

如果我错了,请纠正我, 提前感谢,


Fede

Self是该类的实例。如果希望每个方法在对象中存储自己的名称,则需要为其指定唯一的属性

比如说

def fullname(self, first, last):

    self.fullNameFirst = first
    self.fullNameLast = last

self
是对当前实例的引用。该实例上的属性对于每个方法都不是唯一的,不。方法的全部要点是能够操纵实例的状态

在每次方法调用后打印这两个属性,您将看到它们随着每个方法操作这些属性而改变:

>>> emp1 = Employee("Fede", "Cuci")
>>> emp1.first
'Fede'
>>> emp1.last
'Cuci'
>>> emp1.fullname("Fede2", "Cuci2")
>>> emp1.first
'Fede2'
>>> emp1.last
'Cuci2'
>>> emp1.other_fullname("Fede3", "Cuci3")
>>> emp1.first
'Fede3'
>>> emp1.last
'Cuci3'
因此,是的,如果每个方法都需要将自己的状态绑定到实例,则需要使用唯一的名称


如果每个方法的属性都是唯一的,则不可能有两个不同的方法对同一条信息进行操作。

self
是当前实例。它不是每个方法所独有的,不。您使用方法操纵实例的当前状态,该状态意味着在这些方法之间共享。那么您认为最后两行会做什么?这些仍然是存储在实例上的相同属性。你希望哪一种方法对这些属性负责?那么,这就是在这种情况下改变self值的方法吗@Martijnpieters不知道你的意思;
self
变量的值是您正在处理的员工的实例,即调用该方法的对象。谢谢,您的答案正是我想要的!