1. 程式人生 > >Python3 類屬性、類變數

Python3 類屬性、類變數

# -*- coding:utf-8 -*-

# 類屬性、類變數:只能由類呼叫的屬性

class People(object):
    # 類變數可以由所有的物件訪問,但是物件只能訪問,不可修改
    # 用來做資源共享
    total = 0

    # 初始化函式,新增物件屬性
    def __init__(self,name,age,school):
        # 給物件屬性賦值
        self.name = name
        self.age = age
        self.school = school
        # 只能使用類修改類變數的值
        People.total += 1

# p1和p2是兩個不同的物件,這兩個物件各自的資訊不共享
p1 = People('雷軍',21,'小米大學')
print (People.total)
p1 = People('馬化騰',22,'騰訊大學')
print (People.total)


'''
# 類無法訪問物件例項的屬性
# print (People.name)
# 物件例項可以訪問類屬性/類變數
print (p1.total)
# 物件沒有辦法修改類變數的值
# 給物件p1添加了一個total屬性
# p1.total = 100
# print (p1.total)

# 如果需要修改類變數的值,只能由類呼叫修改
People.total = 1000
print (People.total)
# 物件訪問到的是修改之後的值
print (p1.total)
'''

p3 = People('張三',23,'清華')
# 獲取物件的屬性值,如果屬性不存在,會出現異常
# AttributeError: 'People' object has no attribute 'ssss'
# name = p3.ssss
# print (name)
# 使用getattar(object,name,default)函式,會把獲取到的屬性值返回
# object 要獲取屬性的物件 name 要獲取的屬性名  default 當屬性不存在,賦一個預設值
# 如果屬性不存在,可以給一個預設值,不會讓程式出現異常
age = getattr(p3,'age',30)
print (age)

# hasattr(object,name) 判斷某個物件是否擁有某個屬性
# 判斷會返回結果,如果有這個屬性返回Ture,沒有返回False
s = hasattr(p3,'age')
print (s)

# 先判斷是否有這個屬性,在執行獲取屬性值得操作
if hasattr(p3,'ssss'):
    s = p3.ssss
else:
    print ('p3沒有ssss這個屬性')