什麼是python類屬性

2022-10-04 14:15:23 字數 2575 閱讀 9914

首先我們來看一下屬性的定義

屬性的定義:python中的屬性其實是普通方法的衍生。

操作類屬性有三種方法:

1.使用@property裝飾器操作類屬性。

2.使用類或例項直接操作類屬性(例如:obj.name,obj.age=18,del obj.age)

3.使用python內建函式操作屬性。

屬性存在的意義:

1、訪問屬性時可以製造出和訪問字段完全相同的假象,屬性由方法衍生而來,如果python中沒有屬性,方法完全可以代替其功能。

2、定義屬性可以動態獲取某個屬性值,屬性值由屬性對應的方式實現,應用更靈活。

3、可以制定自己的屬性規則,用於防止他人隨意修改屬性值。

下面詳細介紹三種操作類屬性的方法:

1.使用@property裝飾器操作類屬性。

定義時,在普通方法的基礎上新增@property裝飾器;屬性僅有乙個self引數,呼叫時無需括號;

zwkvlsjlwf優點:

1) @property裝飾器可以實現其程式設計客棧他語言所擁有的getter,setter和deleter的功能(例如實現獲取,設定,刪除程式設計客棧隱藏的屬性)

2) 通過@property裝飾器可以對屬性的取值和賦值加以控制,提高**的穩定性。

例項**1:

#encodi程式設計客棧ng=utf-8

class goods(): #新式類

@property

def price(self): #檢視屬性值

print ('@property ')

@price.setter #修改、設定屬性

def price(self, value):

print ('@price.setter' )

@price.deleter#刪除屬性

def price(self):

print ('@price.deleter')

obj = goods(50)

obj.price# 自動執行 @property 修飾的 price 方法,並獲取方法的返回值

obj.price = 2000 # 自動執行 @price.setter 修飾的 price 方法,並將2000賦值給方法的引數

del obj.price # 自動執行 @price.deleter 修飾的 price 方法

結果輸出:

@property

@price.setter

@price.deleter

例項**2:通過@property裝飾器對屬性的取值和賦值加以控制

class goods(object):

def __init__(self):

self.value=50

@property

def price(self): # 檢視屬性

return self.value

@price.setter # 新增或設定屬性(屬性名.setter)

def price(self, value):

if value >=50 and value<=100: #對屬性的取值和賦值加以控制

self.value=value

print (self.value)

else:

print ("請輸入乙個50到100之間的數!")

@price.deleter # 刪除屬性(屬性名.deleter) 注意:屬性一旦刪除,就無法設定和獲取

def price(self):

del self.value

print ("price is deleted!")

obj = goods()

print (obj.price) # 自動執行 @property 修飾的 price 方法,並獲取方法的返回值

obj.price=106 # 自動執行 @price.setter 修飾的 price 方法,並將106 賦值給方法

del obj.price # 自動執行 @price.deleter 修飾的 price 方法

結果輸出:

50請輸入乙個50到100之間的數!

price is deleted!

例項擴充套件:

class dog(object):

name = 'dog'

def init(self):

self.age = 18

d1 = dog()

d2 = dog()

這裡有兩個例項 d1,d2 吧。

d1.name # 輸出 dogd2.name # 輸出 dogd1.name = 'abc'

d1.name # 輸出 abcd2.name # 輸出 dogdog.name # 輸出 dog

原因是 d1.name 輸出 dog 不是因為這個例項共享了類屬性,而是因為這個例項沒有 dog 屬性,所以 python 查詢了類屬性。但是一旦你修改了 d1.name 相當於給 d1 例項繫結了 name 屬性之後,d1.name 就與類屬性無關了。既然這樣就談不上例項之間共享類屬性了,因為只要一賦值,就相當於繫結了屬性,則上述 d1.name 的含義和 d2.name 的含義就不同了,它們的值也不同,很明顯它們的資料沒有共享。

python 類屬性 用處 Python類屬性詳解

類屬性1.類定義後就存在,而且不需要例項化 2.類屬性使得相同類的不同例項共同持有相同變數 類屬性例項 attrb.py class testcss cssa class attribe def init self self.a 0 self.b 10 def info self print a s...

python限定類屬性的類屬性 slots

slots 由於python是動態語言,任何例項在執行期都可以動態地新增屬性。如果要限制新增的屬性,例如,student類只允許新增 name gender和score 這3個屬性,就可以利用python的乙個特殊的 slots 來實現。顧名思義,slots 是指乙個類允許的屬性列表 class s...

Python類屬性,例項屬性

dreamfor的部落格 1.python類資料屬性 定義在類裡面但在函式外面的變數,它們都是靜態的。一段很簡單的 但反應了很多 class a a 1 乙個類裡面有個屬性a a a b a a.a b.a a.a 這個屬效能被例項和類訪問 a.a 2 b.a a.a 改變例項a的屬性a,例項b和類...