python物件導向

2021-09-24 20:53:33 字數 2054 閱讀 1021

@property裝飾器

之前我們討論過python中屬性和方法訪問許可權的問題,雖然我們不建議將屬性設定為私有的,但是如果直接將屬性暴露給外界也是有問題的,比如我們沒有辦法檢查賦給屬性的值是否有效。我們之前的建議是將屬性命名以單下劃線開頭,通過這種方式來暗示屬性是受保護的,不建議外界直接訪問,那麼如果想訪問屬性可以通過屬性的getter(訪問器)和setter(修改器)方法進行對應的操作。如果要做到這點,就可以考慮使用@property包裝器來包裝getter和setter方法,使得對屬性的訪問既安全又方便,**如下所示。

class person(object):

definit(self,name,age):

self._name = name

self._age = age

#訪問器getter方法

@property

def name(self):

return self._name

#訪問器getter方法

@property

def age(self):

return self._age

#修改器setter方法

@age.setter

def age(self,age):

self._age = age

def play(self):

if self._age <=18:

print('%s正在玩象棋'% self._name)

else:

print('%s正在玩鬥地主'% self._name)

def main():

person = person(『大錘』,17)

person.play()

person.age = 22

person.play()

ifname== 『main』:

main()

執行結果:

__slots__魔法

我們講到這裡,不知道大家是否已經意識到,python是一門動態語言。通常,動態語言允許我們在程式執行時給物件繫結新的屬性或方法,當然也可以對已經繫結的屬性和方法進行解繫結。但是如果我們需要限定自定義型別的物件只能繫結某些屬性,可以通過在類中定義__slots__變數來進行限定。需要注意的是__slots__的限定只對當前類的物件生效,對子類並不起任何作用。

class person(object):

# 限定person物件只能繫結_name, _age和_gender屬性

__slots__ = ('_name', '_age', '_gender')

def __init__(self, name, age):

self._name = name

self._age = age

@property

def name(self):

return self._name

@property

def age(self):

return self._age

@age.setter

def age(self, age):

self._age = age

def play(self):

if self._age <= 16:

print('%s正在玩飛行棋.' % self._name)

else:

print('%s正在玩鬥地主.' % self._name)

def main():

person = person(『王大錘』, 22)

person.play()

person._gender = 『男』

執行結果:

python物件導向學習 python物件導向學習

物件導向最重要的概念就是類 class 和例項 instance 必須牢記類是抽象的模板,比如student類,而例項是根據類建立出來的乙個個具體的 物件 每個物件都擁有相同的方法,但各自的資料可能不同。物件導向三個概念 1.封裝 即把客觀事物封裝成抽象的類,並且類可以把自己的資料和方法讓可信的類進...

python物件導向總結 Python物件導向總結

python 物件導向 oop 1 物件導向 是乙個更大封裝,把乙個物件封裝多個方法 2 類 是對一些具有相同特徵或行為的事物的乙個統稱,是抽象的,不能直接使用 特徵被稱為屬性 行為被稱為方法 3 物件 是由類建立出來的乙個具體的存在,可以直接使用 先有類再有物件,類只有乙個,而物件可以有多個 類中...

python登入物件導向 python 物件導向

一 屬性和方法 1.a a 例項屬性 通過例項物件來新增的屬性就是例項屬性 a.count 10 例項方法都是在類中直接定義的 以self為第乙個引數的方法都是例項方法 當通過例項物件呼叫時,會自動傳遞當前物件作為self傳入 當通過類物件呼叫時,不會自動傳遞self a.test 等價於 a.te...