Ruby中,有两个很重要的对象,一个是Class,一个是Object,虽说在ruby中号称“万物皆对象”,但实际上,Object只是Class的一个实例,而Class是一个增强版的Object(因为Class中除了Object所有的属性外,还拥有其他类特有的属性,例如“方法表”。
1.实例所有的非singleton methods方法都保存在类的“方法表”中,所有的singleton methods都保存在实例单例类中,当调用实例的方法时,ruby会首先去查找这个实例的实例单例类,如果这个单例类存在的话,查找这个单例类的方法表,若此方法表中不存在被调用的方法,则去查找实例对应类的方法表(此处假设没有引入module),若还不存在,则顺着继承关系一直向上找,此时,就只找父类本身的方法表,而忽略父类的单例类。
2.类的类方法都保存在类的单例类中(类本身方法表中存放的方法既实例方法仅供object使用),当定义了一个类方法时
ruby 代码
- def MyClass.myclass_method
- end
-
-
- class << MyClass
- def myclass_method
- end
- end
- #或者
- def self.myclass_method
- end
ruby会尝试去创建MyClass这个类的单例类,然后将方法添加到单例类中,如果单例类已经存在,则直接添加到其中,如果其中有同名方法,则直接覆盖。所以,当调用类方法( MyClass.myclass_method)的时候,ruby会直接查找单例类,如果单例类或者类方法不存在,则顺着继承关系向上找,找父类的单例类,以此类推。注意,此时,在单例类中查找的是单例类的“实例方法”(单例类并不能被实例化,类A也不是A的单例类的一个实例,但是,查找的确实是实例方法,和object的查找有些类似,毕竟ruby中,“万物皆对象”)
ruby 代码
- class A
-
-
-
-
-
- def self.class_method_in_singleton_class
- puts self
- end
- end
-
-
- class B < A
- def self.singleton_method_defined_in_B
- end
- end
-
- class C < B
- end
-
-
-
-
-
-
-
- C.class_method_in_singleton_class
分享到:
相关推荐
总的来说,虽然Java中的抽象类不能直接实例化,但我们可以通过继承并实现其抽象方法,或者利用字节码工具和注解处理器在运行时或编译时动态生成新的类来间接达到实例化抽象类的目的。这样的设计允许我们创建更加灵活...
引用一个对象实例和该对象的实例方法。在 C 或 C 中与委托最接近的是函数指针,但函数指针只能引用静态函数,而委托可以同时引用静态方法和实例方法。在后一种情况中,委托不仅存储对方法入口点的引用,还存储对调用...
这里的“1是类方法,2是实例方法,3是使用super和this关键字”可能指的是在不同上下文中,如何区分和使用类方法与实例方法,以及如何在构造函数或方法中使用`super`和`this`关键字来调用基类的构造函数或方法,或者...
在Python编程语言中,类方法、实例方法和静态方法是面向对象编程的重要组成部分。它们各自有不同的用途和调用方式,...了解和熟练掌握类方法、实例方法和静态方法的使用,是成为一名优秀的Python开发者的关键技能之一。
本文实例讲述了Python操作Oracle数据库的简单方法和封装类。分享给大家供大家参考,具体如下: 最近工作有接触到Oracle,发现很多地方用Python脚本去做的话,应该会方便很多,所以就想先学习下Python操作Oracle的...
当你创建一个类的实例时,你会获得该类定义的属性、方法和事件的一个具体实例。在Delphi中,你可以通过关键字`new`来创建一个对象的实例。 例如,假设我们有一个名为`Person`的类,它有`Name`和`Age`两个属性。在...
在Java编程语言中,继承是一种面向对象编程的重要特性,它允许一个类(子类或派生类)继承另一个类(父类或基类)的属性和方法。这有助于代码重用,减少冗余,并实现多态性。在这个特定的程序中,我们看到了一个关于...
在Python编程语言中,方法是与类相关的函数,它们根据其用途和定义方式分为三类:实例方法、类方法和静态方法。这三种方法各有特点,适用于不同的场景。接下来,我们将详细介绍这三种方法的特点以及它们之间的区别。...
python基础训练题,类和方法的概念和实例 类(Class):用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。 方法:类中定义的函数。 类的构造方法__init__():...
Python中的实例方法、类方法和静态方法是面向对象编程中的核心概念,它们各自有不同的作用和使用场景。在Python中,这三个方法类型可以帮助我们更好地组织和管理类的行为。 1. **实例方法**: - 实例方法是与类的...
在Ruby语言中,类实例变量、类实例方法与类变量和类方法是构成面向对象编程模型的重要组成部分。它们各自有不同的用途和行为特性,下面详细介绍这些概念的区别以及它们的使用场景。 首先,类实例变量和类实例方法都...
* (如果是重写即子类将父类的实例方法重写类,则调用子类的,如果是隐藏即方法则父类中声明为静态方法,则调用父类本身的但具体方法中的成员是否被子类修改需要进行分析) —> * 下一层次的父类中重复前一个过程
其次需要这个公共的方法在一个公共的方法类中,这个方法类也需要是public 之后把这个相关的文件编译成dll文件 在其他想要调用这个公共方法的地方引用这个dll 在调用这个公共方法的文件开头声明这个命名空间,用...
让我们看一个实例分析,了解如何使用抽象类和抽象方法。首先,我们定义了一个抽象类Animal: ```java abstract class Animal { String name; int age; public abstract void cry(); } ``` 然后,我们定义了一个...
方法调用分为两种主要类型:静态方法调用和非静态方法(实例方法)调用。 **1. 静态方法调用** 静态方法是属于类的方法,不依赖于任何特定的对象实例就可以被调用。在Java中,如果一个方法被`static`关键字修饰,...
Python中的实例方法、类方法和静态方法是面向对象编程中的重要概念,它们各自有不同的作用和使用场景。在Python中,这些方法都是定义在类(class)内部,但它们的调用方式和作用范围有所不同。 **实例方法...
EXT dojochina Ext类实例方法.rar 是一个与EXT JS框架相关的压缩文件,EXT JS是一个广泛使用的JavaScript库,用于构建富互联网应用程序(RIA)。这个压缩包可能包含了关于EXT JS中的Ext类的一些实例方法的详细教程或...
本资料“python中定义实例方法共3页.pdf.zip”可能涵盖了关于如何在Python类中创建和使用实例方法的关键概念。 首先,我们需要了解Python中的类(Class)。类是对象的蓝图,它定义了一组属性(数据成员)和方法...