我正在学习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"
,会使该属性对该特定方法唯一,而不是如果我再次尝试打印该属性,它会根据我调用的方法更新它的值最后...
如果我错了,请纠正我, 提前谢谢,
菲德
答案 0 :(得分:1)
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'
所以是的,如果每个方法都需要将自己的状态绑定到实例,那么您需要使用唯一的名称。
如果属性对于每个方法都是唯一的,那么您可能永远不会有两种不同的方法对同一条信息进行操作。
答案 1 :(得分:0)
Self是该类的实例。如果您希望每个方法都在对象中存储自己的名称,则需要为其提供唯一属性。
例如
def fullname(self, first, last):
self.fullNameFirst = first
self.fullNameLast = last