直接访问实例变量与使用访问器方法

Posted

技术标签:

【中文标题】直接访问实例变量与使用访问器方法【英文标题】:Directly accessing an instance variable vs. Using an accessor method 【发布时间】:2011-06-06 01:44:50 【问题描述】:

谁能解释通过self.attribute@attribute 访问实例属性的区别?

【问题讨论】:

【参考方案1】:

self.attribute 调用方法attributeself.attribute = value 使用参数value 调用方法attribute=@attribute@attribute = value 获取/设置实例的值变量@attribute

所以基本上它们是两个完全不同的东西。

但是,如果您调用 attr_accessor :attribute,它会定义方法 attribute 以返回 @attribute,并定义方法 attribute=(value) 以设置 @attribute = value。所以在那种情况下,没有区别。

【讨论】:

请注意,即使您当前拥有attr_accessor,通常也建议使用self.(除非您正在编写getter/setter方法)。如果您稍后更改访问器方法以执行更多操作而不仅仅是获取/设置实例变量,这可以保护您免受额外的重构工作和错误。 (或者如果其他人对您的工作进行了修补或子类化。) Phrogz 谈到的错误之一是,如果您只是调用 attribute = _____ 而不是 self.attribute = ______ 您设置的是局部变量而不是实例变量。【参考方案2】:

“直接访问实例变量比使用访问器方法访问它们快两倍”

查看:https://www.greyblake.com/blog/2012-09-01-ruby-perfomance-tricks/

【讨论】:

链接已损坏。这个有效:greyblake.com/blog/2012-09-01-ruby-perfomance-tricks

以上是关于直接访问实例变量与使用访问器方法的主要内容,如果未能解决你的问题,请参考以下文章

属性存取直接访问实例变量

Python类,实例变量和访问器方法

iOS在类内部怎么访问实例变量比较好?

类总结

访问属性和访问实例变量的区别

Python 面向对象