这两个代码有何不同?

时间:2018-07-07 18:07:07

标签: python class oop object

这里有两段代码执行完全相同的任务。 这个:

class employees:
    raise_amount=1.04
    def __init__(self, first, last, pay):
        self.first=first
        self.last=last
        self.pay=pay
        self.email=first + '.' +last+ '@abc.com'
        self.fullname=first+' '+last

    def raised(self):
        self.raised=self.pay*self.raise_amount



em1=employees('Carey', 'Barlog', 6000)
em2=employees('Test', 'User', 3000)
em2.raised()
print(em2.raised)

还有:

class employees:
    raise_amount=1.04
    def __init__(self, first, last, pay):
        self.first=first
        self.last=last
        self.pay=pay
        self.email=first + '.' +last+ '@abc.com'
        self.fullname=first+' '+last
        self.raised=self.pay*self.raise_amount


em1=employees('Carey', 'Barlog', 6000)
em2=employees('Test', 'User', 3000)

print(em2.raised)

有人可以向我解释一下两者之间的区别吗?如果我使用一种方法来替代另一种方法?

2 个答案:

答案 0 :(得分:0)

第一个代码段是有问题的,因为您为方法和实例属性使用了相同的名称raised,所以您将销毁raised方法并将其替换为首次调用后的raised属性。

撇开这个问题,仅当调用raised时,第一个代码段设置employees.raised()属性,而实例初始化时,第二个代码段设置raised属性。前者允许更多地控制何时计算raised(可能在payraise_amount得到更新之后),而后者则允许始终为每个实例初始化raised属性

答案 1 :(得分:0)

在第一个示例中,您所要做的就是调用类,并且由于创建类employee的实例时python运行__init__,因此self.raised将会增加。

但是,如果您想创建一个实例并然后提高工资,让我们稍后再说,您将使用第二个实例,因为它定义了工资提高功能。