我对OOP中对象的行为有些困惑

时间:2019-05-01 20:47:26

标签: python class oop object

我已经了解到,对象的行为是对象(在现实生活中)执行的动作,但是在编程中,上下文不是它描述的对对象执行的操作/动作方法。

例如,在下面的代码中,我们提供了一种显示员工全名的方法。在这种情况下,动作是由对象执行的还是对对象执行的动作?将全名与狗对象的行为(例如吠叫,睡觉等)进行比较时,如何显示全名是该对象的行为。谢谢您的帮助

class employee:

    raise_value=1.05
    def __init__(self,first,last,pay):

        self.first=first
        self.last=last
        self.pay=pay

    def emp_fullname(self):
        return "Full name is {} {}".format(self.first,self.last)

    def set_raise(self):
        self.new_sal=float(self.pay)*employee.raise_value
        return 'My new salary is {}'.format(self.new_sal)

e1=employee("Chyanit","Singh","60000")
e2=employee("Parag","Singh","40000")

e1.emp_fullname()

2 个答案:

答案 0 :(得分:2)

对象的行为始终是对外部刺激的响应。在OO中,消息通过“某物”广播,并且您的对象以某种方式响应。如果消息是信息请求,则将触发对象的知识责任;如果消息是事件或执行某项操作的请求,则将触发行为责任。操作将取决于对象的状态和事件的性质。有时,一个事件包含系统当前整体状态的“快照”,该快照为要执行的对象操作提供了上下文。请注意,无论对象做什么,它都不会影响其外部上下文。

第三项责任是提供服务。大多数OOP编程实际上都是为服务而服务的,这些服务只是传递给它们的上下文的转换,而对对象本身没有任何影响。它们中几乎没有行为或知识责任。

在您的employee类中,您既承担知识责任,又承担行为责任。该类的一个实例将能够响应对雇员全名的请求,并以改变其内部状态(即获得新工资)的方式“表现”。我唯一要更改的是将set_raise重命名为raise_salary,以使其看起来不像是setter方法。

答案 1 :(得分:0)

方法由对象执行或在对象上执行。不必是一个或另一个。 GetFullName()SetFullName(first,last)都是方法。前者由对象执行;就像狗吠一样,它可以为您提供某些东西。后者是在对象上执行的,例如当您命名新狗或给它骨头时。

这个问题可能会也可能不会帮助您了解什么是方法: What's the difference between a method and a function?