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

2024-06-17 11:57:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在学习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"会使该属性对该特定方法是唯一的,而不是如果我再次尝试打印该属性,它会根据我上次调用的方法更新它的值。。。你知道吗

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

联邦快递


Tags: 方法self属性initdefemployeeclassfirst
2条回答

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'

因此,是的,如果每个方法都需要将自己的状态绑定到实例,则需要使用唯一的名称。你知道吗

如果每个方法的属性都是唯一的,那么就不可能有两个不同的方法对同一条信息进行操作。你知道吗

相关问题 更多 >