隱藏屬性以及property裝飾器

2022-09-10 09:54:22 字數 3354 閱讀 2375

隱藏屬性

1、如何隱藏

再要隱藏的資料前面加__即可

2、隱藏屬性注意點

1、在類定義階段,發生了語法上的變形(變為_類名__屬性名)

2、隱藏對外不對內

3、只有在定義階段發生變形,其他情況都不發生變形了

3、為什麼要隱藏

1、類裡面的隱藏屬性,類外部可以使用,但是目的不是讓類外部使用的,類外部如果想要使用,在類內部開放介面繼續寧訪問

2、可以達到對外部資料的嚴格控制

4、**演示

class

student():

__school = 'sh'

#_student__school => _類名__屬性名

def__init__

(self, name, age):

self.

__name =name

self.age =age

def__tell_info(self): #

_student__tell_info => _類名__函式名

print('

name: %s, age: %s

' % (self.__name

, self.age))

defget_school(self):

return self.__school

#self._student__school

defset_school(self, v):

if type(v) is

notstr:

print('

資料型別不合法')

#if isinstance(v, str):

return

self.

__school = v

property裝飾器1、作用就是把方法偽裝成屬性

2、**演示

class

student():

__school = 'sh'

#_student__school => _類名__屬性名

def__init__

(self, name, age):

self.

__name =name

self.age =age

def__tell_info(self): #

_student__tell_info => _類名__函式名

print('

name: %s, age: %s

' % (self.__name

, self.age))

@property

#把方法偽裝成屬性

defname(self):

return

"name:%s

" % self.__name

@name.setter

defname(self, v):

if type(v) is

notstr:

print('

資料型別不合法')

#if isinstance(v, str):

return

self.

__name =v

@name.deleter

defname(self):

print('

不讓刪'

)stu = student('

ly', 18)

print

(stu.get_name())

stu.name = 123

print

(stu.name)

del stu.name

3、練習bmi指數:計算公式如下

體質指數(bmi)=體重(kg)÷身高^2(m)

ex:70kg÷(1.75×1.75)=22.86

class

bmi():

def__init__

(self, height, weight):

self.height =height

self.weight =weight

@property

defget_bmi(self):

return self.weight / (self.height ** 2)

bmi = bmi(1.8, 70)

print(bmi.get_bmi)

4、擴充套件property也可以這樣使用

class

student():

__school = 'sh'

#_student__school => _類名__屬性名

def__init__

(self, name, age):

self.

__name =name

self.age =age

def__tell_info(self): #

_student__tell_info => _類名__函式名

print('

name: %s, age: %s

' % (self.__name

, self.age))

defget_name(self):

return

"name:%s

" % self.__name

defset_name(self, v):

if type(v) is

notstr:

print('

資料型別不合法')

#if isinstance(v, str):

return

self.

__name =v

defdel_name(self):

print('

不讓刪'

)

#了解name =property(get_name, set_name, del_name)

property屬性引數

1.讀寫屬性 預設是readwrite,會生成getter和setter方法 如果是readonly表示只會生成getter方法 2.setter處理 預設是assign 賦值 因此基本資料型別不需要加這個引數。因為在setter方法裡,我們經常要將乙個物件賦值給類的成員屬性,這個時候根據記憶體管理...

Property 屬性動畫

單個屬性動畫 objectanimator offloat view,rotationx 0,180 setduration 3000 start 多個屬性動畫 多個屬性動畫組合 設定乙個中心點 view.setpivotx 0.5f view.setpivoty 0.5f 方式一 建立多個屬性動畫...

屬性(Property)動畫

屬性動畫與補間動畫的區別 最大的區別是補間動畫就算控制項移動到任何位置,控制項本身位置還是不變。而屬性動畫是直接改變控制項的位置。從某種角度看,屬性動畫是增強版的補間動畫,其強大體現在兩方面 補間 tween 動畫只能定義兩個關鍵幀在透明度 旋轉 傾斜 位移這4個方面的變化,而屬性動畫可以定義任何屬...