1. 程式人生 > >ruby中的類方法與單例類

ruby中的類方法與單例類

類方法

類方法:方法的接受者就是類本身的方法稱為類方法。

直白一點來說,類方法不需要例項化得到物件去呼叫,可以直接通過類名.方法名去呼叫一個方法。

類方法有三種定義形式

第一種:class << 類名   ~ end

class << Hello

def hello(name)

p "#{name},hello"

end

end

第二種:class << self ~ end

class Hello

class << self

def hello(name)

p "#{name},hello"

end

end

end

第三種:def 類名.方法名 ~ end

def Hello.hello(name)

p "#{name},hello"

end

第四種:類似於第二種

class Hello

def self.hello(name)

p "#{name},hello"

end

end

以上都可以通過

Hello.hello("Nick")

單例類

通過class << 類名   ~ end定義的類也被成為單例類

單例類,類中的方法屬於特定的例項。

str1 = "ruby"

str2 = "Ruby"

class << str1

def hello

"Hello,#{self}"

end

end

p.str1.hello        #hello,ruby

p str2.hello       #error

相關推薦

ruby方法

類方法 類方法:方法的接受者就是類本身的方法稱為類方法。 直白一點來說,類方法不需要例項化得到物件去呼叫,可以直接通過類名.方法名去呼叫一個方法。 類方法有三種定義形式 第一種:class <&

Python基礎——new方法模式

介紹:     new方法是類中魔術方法之一,他的作用是給類例項化開闢一個記憶體地址,並返回一個例項化,再由__init__對這個例項進行初始化,故它的執行肯定就是在初始化方法__init__之前了。new方法的第一個引數cls是類本身的含義(即你要例項化的類),與self

Android開發筆記之工具使用靜態方法物件方法的優劣

最近在做專案開發的時候用到了很多工具類,之前對工具類的理解僅限於使用靜態方法,沒有細究.寫了很多有損app執行效能的程式碼.例如在靜態方法內建立了例項物件,這樣讓靜態方法持有物件,使得物件一直存在與記憶體中,無法被GC回收,佔用記憶體,影響效能和使用者體驗

重寫父方法,重寫父方法呼叫父方法

class Animal: def eat(self): print("-----吃-----") def drink(self): print("-----喝-----") class Dog(Animal): def bark(self): print("-----汪汪

二十三種設計模式第一天:工廠模式和模式

從今天開始學習java常見的二十三種設計模式,每天2種,天晴下雨,雷打不動。 第一天:            工廠類模式和單例類模式 首先來看一下java設計中應當遵循的原則: 1、開閉原則(Open Close Principle)   開閉原則主要意思是 對擴充

多執行緒呼叫方法會不會造成執行緒安全問題

區域性變數不會受多執行緒影響 成員變數會受到多執行緒影響 多個執行緒應該是呼叫的同一個物件的同一個方法: 如果方法裡無成員變數,那麼不受任何影響 如果方法裡有成員變數,只有讀操作,不受影響                      存在寫操作,考慮多執行緒影響值 當多個執行

python7種實現模式的方法:staticmethod、classmethod、屬性方法、__new__、裝飾器、元、名字覆蓋

本文的以下實現方法為了簡單起見不考慮執行緒安全。 一:staticmethod 程式碼如下: class Singleton(object): instance = None def __init__(self): raise Syntax

objc方法和實方法有什麽本質區別和聯系

實例 屬於 通過 實例對象 對象方法 self 類方法 緩存 變量 類方法: 類方法是屬於類對象的 類方法只能通過類對象調用 類方法中的self是類對象 類方法可以調用其他的類方法 類方法中不能訪問成員變量 類方法中不能直接調用對象方法 類方法是存儲在元類對象的方法緩存

Java變量、實變量、方法、實方法的區別

方法 入口地址 內存 show 實例方法 static oid 共享 程序 類變量:形如static int a; 顧名思義,類變量可以理解為類的變量,類變量在類加載的時候就已經給它分配了內存空間,不同於實例變量(int a; ),實例變量是在該類創建對象的時候分配內存的。

,__call__方法模式

rom pan AR erro metaclass self acl clas HA 在python中一切皆對象的概念。 舉一個例子: class Chinese: country=“china” def __init__(self, name,age,s

Java構造方法、實方法方法的區別

而在 class syn 此外 alt 創建 子類 語法規則 自身 1. 構造方法 構造方法負責對象的初始化工作,為實例變量賦予合適的初始值。必須滿足以下的語法規則: 方法名與類名相同; 不要返回類型(例如return、void等); 不能被

Java學習——方法傳遞參數分簡單復雜型(引用型)編程計算100+98+96+。。。+4+2+1的值,用遞歸方法實現

dig oid 傳遞 system alt style 類型 遞歸 gen package hello; public class digui { public static void main(String[] args) { /

Python:屬性,實屬性,私有屬性靜態方法方法,實方法

所有 參數 方法 rate self 類屬性 不能 anaconda 賦值 類屬性可以直接在方法中賦值,但 一、調用該屬性時,必須先調用該方法; 二、與 init 方法區別是,init方法只初始化一次,初始化完成後作為全局變量。在方法中賦值屬性,每次調用該方法,該屬性初始化

Python屬性,方法例項屬性,例項方法

class Person(object): num=10000 def __init__(self,name): self.name=name @classmethod def getNum(cls): return cls.n

C++的 靜態成員變數,全域性物件,模式

前段時間要實習一個充值介面,建立了一個類(就叫類A好了),這個類A要和另外3個類進行互動,3個類對類A修改的資料是對其他類可見的。這種情況我想到了3個方法: 1.static 靜態成員,靜態成員為該類的所有例項所共享,3個類中各自建立一個類A的物件,它們對靜態成員的修改對其他類可見。 2.全

python面向對象對象、實對象、變量、實變量、方法、實方法、靜態方法

兩種 對象 都是 self 這一 人類 name method class關鍵字 1. 類對象和實例對象   Python中一切皆對象,Python類本身也是一種對象,類定義完成後,會在當前作用域中定義一個以類名為名字的命名空間。類對象具有以下兩種操作: 可以通過“類

java方法物件方法區別

public class Test { /** * 下面這個方法就是靜態方法,應該就是樓主所說的類方法~~ * 靜態方法必須定義成static的,在類Test被例項化以前就已經存在於記憶體中 * 靜態方法使所有該類的例項也就是物件共有的方法 */ public static void f1() {

菜鳥教程 | Egret場景切換管理切換和使用方法

場景切換是很多開發者在開發過程中必不可少的一個環節,當專案中有兩個或兩個以上的遊戲場景時,怎樣管理這些場景,能夠使它們之間的切換更加方便呢?今天就為大家介紹場景切換管理類的切換方法和單例的使用方法。 案例原始碼:https://github.com/hkjlx/qhcj  首先建立一個所有場景的父類Scene

《菜鳥教程》| Egret場景切換管理切換和使用方法

場景切換是很多開發者在開發過程中必不可少的一個環節,當專案中有兩個或兩個以上的遊戲場景時,怎樣管理這些場景,能夠使它們之間的切換更加方便呢?今天就為大家介紹場景切換管理類的切換方法和單例的使用方法。 案例原始碼:https://github.com/hkjlx/qhcj

反射破壞及呼叫JavaBean生成 的方法

首先要上被破壞的單例類 package com.mywenwen; public class Simpleton { private String username; private static Simpleton simple; private Simpleto