python - 我对 OOP 中对象的行为有点困惑

标签 python class oop object

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

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

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

最佳答案

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

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

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

关于python - 我对 OOP 中对象的行为有点困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55942530/

相关文章:

python - 如何更改 QGridLayout 小部件的大小?

python - django socketio - SocketIOHandler 错误

java - 返回泛型类类型的 Vector

python - 在交互式 Python Shell 中实例化一个类

python - 如何将数据框中的列合并到另一个数据框中

python - 使用 youtube-search 模块列出超出范围的索引

Java 未实例化类列表

c++ - 你必须有一个默认的构造函数吗?

java - 避免在观察者方法中使用instanceOf

JavaScript 伪类模式