在類中,根據變量定義的位置不同,以及定義的方式不同,類屬性又可以細分為以下三種類型:
- 類體中,所有函數之外:類屬性(類變量)
- 類體中,所有函數內部,以“self.變量名”的方式定義的變量:實例屬性(實例變量)
- 類體中,所有函數內部,以“變量名 = 變量值”的方式定義的變量:局部變量
1.類變量
所有類的實例化對象都同時共享類變量。類變量的調用方法有兩種,既可以使用類名直接調用,也可以使用類的實例化對象調用(此方法不推薦使用)。
class Person:
name = "xiaobai"
age = 10
def __init__(self, name, age):
self.name = name
self.age = age
#使用類名直接調用
print(Person.name)
print(Person.age)
#通過類名修改類變量的值
Person.name = "lilei"
Person.age = 20
print(Person.name)
print(Person.age)
#執行結果
xiaobai
10
lilei
20
2.實例變量
只作用於調用方法的對象。實例變量只能通過對象名訪問,無法通過類名訪問。
class Person:
def __init__(self):
self.name = "xiaobai"
self.age = 10
def say(self):
self.content = "i love python"
#name、age以及content都是實例變量。Person類的類對象都會包含name和age實例變量,只有調用了say()方法的類對象才會包含content實例變量。
mary = Person()
print(mary.name)
print(mary.age)
mary.say()
print(mary.content)
#執行結果
xiaobai
10
i love python
實例變量和類變量可以同名,但這種情況下使用類對象無法調用類變量,它會首選實例變量。
class Person:
name = "lilei"
def __init__(self):
self.name = "xiaobai"
self.age = 10
def say(self):
self.content = "i love python"
mary = Person()
print(mary.name)
#執行結果
xiaobai
3.局部變量
局部變量只能用於所在函數中,函數執行完成后,局部變量也會被銷毀。
