# Initialize

**URL:** <https://www.ruby-forum.com/t/initialize/85999>\
**Category:** Ruby\
**Created:** [January 1, 2006, 2:58pm UTC](https://www.ruby-forum.com/t/initialize/85999 "2006-01-01T14:58:42Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![johanatan](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/8491ac/32.png) [@johanatan](https://www.ruby-forum.com/u/johanatan)\
**Post date:** [January 1, 2006, 2:58pm UTC](https://www.ruby-forum.com/t/initialize/85999/1 "2006-01-01T14:58:42Z")

</div>

Should initialize() be public, private or protected, and why?

Thanks

---

<div class="post-metadata">

**Author:** ![johanatan](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/8491ac/32.png) [@johanatan](https://www.ruby-forum.com/u/johanatan)\
**Post date:** [January 1, 2006, 3:07pm UTC](https://www.ruby-forum.com/t/initialize/85999/2 "2006-01-01T15:07:44Z")

</div>

> > > > > “J” == Jonathan L. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) writes:

J\> Should initialize() be public, private or protected, and why?

moulon% cat b.rb  
#!/usr/bin/ruby  
class A  
protected  
def initialize  
end  
end

p A.private\_instance\_methods(false)  
p A.protected\_instance\_methods(false)  
moulon%

moulon% ./b.rb  
[“initialize”]  
[]  
moulon%

Guy Decoux

---

<div class="post-metadata">

**Author:** ![johanatan](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/8491ac/32.png) [@johanatan](https://www.ruby-forum.com/u/johanatan)\
**Post date:** [January 1, 2006, 4:51pm UTC](https://www.ruby-forum.com/t/initialize/85999/3 "2006-01-01T16:51:49Z")

</div>

On Sun, 2006-01-01 at 23:06 +0900, ts wrote:

> end
> 
> p A.private\_instance\_methods(false)  
> p A.protected\_instance\_methods(false)  
> moulon%
> 
> moulon% ./b.rb  
> [“initialize”]  
> []  
> moulon%

Thanks for the reply. Forgive me, but I don’t understand what the point  
is in your example? Or why initialize is returned by  
private\_instance\_methods() but not protected\_instance\_methods()? Could  
you elaborate a bit please?

Thanks

---

<div class="post-metadata">

**Author:** ![johanatan](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/8491ac/32.png) [@johanatan](https://www.ruby-forum.com/u/johanatan)\
**Post date:** [January 1, 2006, 4:54pm UTC](https://www.ruby-forum.com/t/initialize/85999/4 "2006-01-01T16:54:51Z")

</div>

> > > > > “J” == Jonathan L. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) writes:

J\> Thanks for the reply. Forgive me, but I don’t understand what the  
point  
J\> is in your example? Or why initialize is returned by  
J\> private\_instance\_methods() but not protected\_instance\_methods()?  
Could  
J\> you elaborate a bit please?

#initialize (like #initialize\_copy) is _always_ a private method. Even  
if  
you try to define it as public or protected, ruby will make it a  
private  
method.

Guy Decoux

---

<div class="post-metadata">

**Author:** ![johanatan](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/8491ac/32.png) [@johanatan](https://www.ruby-forum.com/u/johanatan)\
**Post date:** [January 1, 2006, 5:00pm UTC](https://www.ruby-forum.com/t/initialize/85999/5 "2006-01-01T17:00:53Z")

</div>

> > > > > “t” == ts [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) writes:

t\> #initialize (like #initialize\_copy) is _always_ a private method.  
Even if  
t\> you try to define it as public or protected, ruby will make it a  
private  
t\> method.

Well, there is an exception when you redefine its state after the  
creation

moulon% cat b.rb  
#!/usr/bin/ruby  
class A  
def initialize  
end  
protected :initialize  
end

A.new  
moulon%

moulon% ./b.rb  
./b.rb:8:in `new': protected method `initialize’ called for  
#\<A:0xb7d64e94\> (NoMethodError)  
from ./b.rb:8  
moulon%

Guy Decoux

---

<div class="post-metadata">

**Author:** ![johanatan](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/8491ac/32.png) [@johanatan](https://www.ruby-forum.com/u/johanatan)\
**Post date:** [January 1, 2006, 5:28pm UTC](https://www.ruby-forum.com/t/initialize/85999/6 "2006-01-01T17:28:09Z")

</div>

On Mon, 2006-01-02 at 00:53 +0900, ts wrote:

> > > > > > “J” == Jonathan L. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) writes:
> 
> J\> Thanks for the reply. Forgive me, but I don’t understand what the point  
> J\> is in your example? Or why initialize is returned by  
> J\> private\_instance\_methods() but not protected\_instance\_methods()? Could  
> J\> you elaborate a bit please?
> 
> #initialize (like #initialize\_copy) is _always_ a private method. Even if  
> you try to define it as public or protected, ruby will make it a private  
> method.

Ah, okay, thanks.
