如果给定相同的名称,python类中的属性会改变值吗?
我正在学习Python OOP编程,并运行以下小脚本:如果给定相同的名称,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 一切都很顺利,直到我注意到,当我创建了一个具有相同属性的方法并将其打印出来时,它会采用这些值:
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”
,将使该属性对该特定方法唯一,而不是如果我再次尝试打印该属性,它将根据我上次调用的方法更新其值
如果我错了,请纠正我,
提前感谢,
FedeSelf是该类的实例。如果希望每个方法在对象中存储自己的名称,则需要为其指定唯一的属性 比如说
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
变量的值是您正在处理的员工的实例,即调用该方法的对象。谢谢,您的答案正是我想要的!