實例變數

在以類別為基礎、物件導向程式設計裡，實例變數（'instance variable）是定義在類別裡的變數（成员变量），類別裡每一個初始化的物件都有一個此變數的實例，且各物件的實例變數是互相獨立的。實例變數類似類別變數，但實例變數不是靜態變數。在C++或Java語言中，實例變數是在類別中宣告，但是是在构造器、方法、塊以外的區域定義。實例變數是在物件初始化時就創建，類別中的所有構造器、方法或塊都可以存取實例變數。也可以對實例變數加上。

實例變數不是類別變數，不過兩者有相似之處。兩者都是類別的屬性（或性質、區段、資料元素）。同一類別不同物件的實例變數可能有不同的值，但同一個類別的類別變數只會有一個，不同物件的類別變數會共享。。「類別」和「實例」的差異也可以用在方法（成員函式）上，類別可以有實例方法（instance method），也可以有類別方法。

實例變數會儲存在記憶體中，生命周期和其所屬物件的生命周期相同。

實例變數是物件的屬性。所有物件都會依其定義，有其自身的實例變數。物件可以更改其實例變數，不會影響其他物件的實例變數。一個物件可以同時有實例變數和類別變數。

物件的所有方法都可以使用實例變數，只有類別方法例外。若符合其存取權限，也可以直接設定實例變數。

範例
 C++ 
struct Request {

    static int count1; // 變數名稱不重要
    int number;

    Request() {
        number = count1; // 修改實例變數 this->number
        ++count1; // 修改類別變數 Request::count1
    }

};

int Request::count1 = 0;

在上述C++的範例中，實例變數Request::number是類別變數 Request::count1的複本，每一個實例創建時，都會給予一個count1的數值，之後再進行遞增。因為number是實例變數，每一個物件都有自己的數值。而物件
Request::count1只有一個，每一個物件都共有同一個值。

 Java 
//Example.java

class Example {
    public int x = 0;

    public void setX(int newValue) {
        this.x = newValue;
    }
}

//Main.java

class Main {
    public static void main(String[] args) {
        Example example1 = new Example();
        Example example2 = new Example();

        //可以設定x的值，因為此變數為公開變數
        example1.x = 10;

        assert example1.x == 10;
        assert example2.x ==  0;

        //因為setX是實例方法，也可以存取該變數
        example2.setX(-10);

        assert example1.x ==  10;
        assert example2.x == -10;
    }
}

在此Java範例中，可以看到如何只修改一個實例變數，其餘的實例變數不受影響。
 Python 
class Dog:
    def __init__(self, breed):
        self.breed = breed #類別變數

# dog_1是一個物件
# 也是Dog類別中的一個的實例
dog_1 = Dog("Border Collie")在上述Python程式中，實例變數是在引數傳入實例時創建的，標示其品種資訊。
參考資料

Category:面向对象的程序设计
Category:变量