【问题标题】:I am a bit confused about the behaviour of objects in OOP我对 OOP 中对象的行为有点困惑
【发布时间】:2019-05-01 20:47:25
【问题描述】:

我读过对象的行为是对象执行的动作(在现实生活中),但在编程中,上下文不是 对对象执行的操作/动作,如方法。

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

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()

【问题讨论】:

  • 这里没有代码可以显示全名。您的 employee 类有一个返回字符串的函数。它实际上更像是一个属性,因为它实际上并没有任何事情。
  • 另请注意,您可以将 emp_fullname 等方法标记为 @property,这可能会更接近您的预期
  • 我认为语言在这里可能很棘手。如果方法属于对象,则可以说这些操作是由对象执行的,而如果它们是外部方法或函数,则可以说它们作用于对象。当然,在第一种情况下,对象也可以作用于自身。
  • 对象的类型决定了对象在python中支持的操作是什么意思,能举个例子说明一下吗

标签: python class oop object


【解决方案1】:

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

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

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

【讨论】:

  • 你能用简单的术语解释一下吗“操作取决于对象的状态和事件的性质。有时一个事件包含系统当前整体状态的“快照”为执行对象操作提供上下文。请注意,无论对象做什么,它都不会影响其外部上下文“非常感谢您的回答
  • 操作的效果取决于对象的状态:例如,如果你有一个薪水上限,当你调用@时达到这个上限,你的操作不会产生任何变化987654324@。一个事件将包含一个快照...:您的对象只知道它自己,因此当一个方法作为事件的结果被调用时,它会传递代表上下文快照的参数。对象不影响其外部上下文:对象本身可能在其方法被调用时改变,但不能改变其外部上下文。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-20
    • 2017-09-20
    相关资源
    最近更新 更多