내가 클래스가 A
있고 B
어디에 B
상속 한다고 가정합시다 A
. 부모 클래스 이름을 어떻게 인쇄합니까?B
class A
end
class B < A
end
내가 시도한 몇 가지
>> B.new.class #=> B #which is correct
>> B.new.parent #=> Undefined method `parent`
>> B.parent #=> Object
>> B.parent.class #=> Class
감사 🙂
답변
class A
end
class B < A
end
B.superclass # => A
B.superclass.name # => "A"
답변
전체 조상 스택을 원하면 다음을 시도하십시오.
object.class.ancestors
예를 들면 :
> a = Array.new
=> []
> a.class.ancestors
=> [Array, Enumerable, Object, Kernel, BasicObject]
답변
객체 (Instantiated Class)가 주어지면 부모 클래스를 파생시킬 수 있습니다.
>> x = B.new
>> x.class.superclass.name
=>"A"
답변
Google이 Rails에서 일하는 사람을 여기로 데려 오는 경우 대신 원하는 것은 base_class
superclass
ActiveRecord 상속 구조를 통과하는 것처럼 있습니다.
class A < ActiveRecord::Base
end
class B < A
end
> A.superclass
=> ActiveRecord::Base
> B.superclass
=> A
> A.base_class
=> A
> B.base_class
=> A
더 나아가 …
class C < B
end
> C.base_class
=> A
즉, base_class
상속 트리의 맨 위를 제공하지만 애플리케이션의 컨텍스트로 제한됩니다. 하지만 Rails에 관한 한 “귀하의 애플리케이션”에는 사용중인 모든 gem이 포함되어 있으므로 gem에 정의 된 항목을 하위 클래스로 분류하는 모델이있는 경우 사용자가 아닌 base_class
gem의 클래스를 반환합니다.
답변
찾고있는 용어는 superclass
입니다. 그리고 실제로 당신은 할 수 B.superclass
얻을 A
. ( B.ancestors
상속 된 모든 클래스 및 모듈 목록을 가져올 수도 있습니다 [B, A, Object, Kernel, BasicObject]
..)
답변
상속은 두 클래스 간의 관계입니다. 상속은 클래스간에 부모 자식 관계를 만듭니다. 이는 코드 재사용을위한 메커니즘이며 공개 클래스 및 인터페이스를 통해 원래 소프트웨어의 독립적 인 확장을 허용하는 메커니즘입니다. 상속의 이점은 계층 아래의 클래스가 상위 계층의 기능을 가져 오지만 고유 한 특정 기능을 추가 할 수도 있다는 것입니다. .
Ruby에서 클래스는 하나의 다른 클래스에서만 상속 할 수 있습니다. (즉, 클래스는 다른 클래스에서 상속 된 다른 클래스에서 상속되는 클래스에서 상속 할 수 있지만 단일 클래스는 한 번에 여러 클래스에서 상속 할 수 없습니다.) BasicObject 클래스는 Ruby의 모든 클래스의 상위 클래스입니다. 따라서 명시 적으로 재정의하지 않는 한 모든 개체에서 해당 메서드를 사용할 수 있습니다.
Ruby는 mixin을 사용하여 단일 클래스 상속을 한 번에 극복합니다.
예를 들어 설명하겠습니다.
module Mux
def sam
p "I am an module"
end
end
class A
include Mux
end
class B < A
end
class C < B
end
class D < A
end
class_name.superclass.name을 사용하여 추적 할 수 있으며이 계층에서 BasicOject를 찾지 못한 경우이 프로세스를 수행 할 수 있습니다. BasicObject는 모든 클래스의 슈퍼 클래스입니다. 클래스 C 계층 트리를보고 싶다고 가정 해 보겠습니다.
C.superclass
=> B
B.superclass
=> A
A.superclass
=> Object
Object.superclass
=> BasicObject
클래스 C의 전체 계층 구조를 볼 수 있습니다.이 방법을 사용하면 부모 클래스에 포함되거나 앞에 추가 된 모듈을 찾을 수 없습니다.
모듈을 포함하여 완전한 계층 구조를 찾는 또 다른 방법이 있습니다. Ruby doc ancestors 에 따르면 . mod에 포함 / 앞에 추가 된 모듈 목록을 반환합니다 (mod 자체 포함).
C.ancestors
=> [C, B, A, Mux, Object, Kernel, BasicObject]
여기서 Mux와 Kernel은 모듈입니다.
http://rubylearning.com/satishtalim/ruby_inheritance.html
https://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming)