PythonOOP高級

2019-05-13

OOP高級編程

1.使用slots(限制動態(tài)的給python綁定屬性)

class Student(object):
  def _init_(self,name,age):
    self.name=name
    self.age=age

>>>s=student()
>>>s.name='Bestin'
>>>s.gender='man'   #動態(tài)的給實例綁定一個屬性
>>>print(s.name)
bestin

def set_score(self,score):
  self.score=score

from types import MethodType
s.set_score=MethodType(set_score,s)  #給實例綁定一個方法
>>>s.set_score(25)
>>>s.score
25

<font color='maroon'>給一個實例綁定方法對另一個實例是不起作用的,為了給所有實力都綁定方法,可以給class綁定方法。</font>

def set_score(self,score):
  self.score=score

>>>Student.set_score=set_score
>>>s.set_score(100)
>>>s.score
100

class Student(object):
  _slots_=('name','age')  #用tuple定義綁定的屬性名稱

>>>s.name='Bestin'
>>>s.age=25
>>>s.score=90
AttributeError

<font color='maroon'>slots定義的屬性僅對當前實例起作用,對繼承的子類是不起作用的。</font>

2.使用@property(@property裝飾器就是負責把一個方法變成屬性調(diào)用的)

版本一:
class Student(object):
slots=('name','age','score','birth')
def init(self,name,age,score,birth):
self._name=name
self._age=age
self._score=score
self._bitrh=birth

  def get_score(self):
    rerurn self._score

  def set_score(self):
    if not isinstance(self._score,int):
      print('ValueType is not correct!')
    elif self._score<0 or self._score>100
      print('score value must be 0`100!')
    else:
      return self._score

版本二:加上@property(getter,setter,也可以只定以一個)

class Student(object):

  @property
  def socre(self):
    return self._score

  @score.setter
  def score(self,value):
    if not isinstance(value,int):
      raise ValueError('score must be aba integer!')
    if value<0 or value>100:
      raise ValueError('score must between 0`100!')
    self._score=value

>>>s=Student()
>>>s.score=60  #實際轉(zhuǎn)化為s.set_score(60)
>>>s.score     #實際轉(zhuǎn)化為s.get_score()  
60
>>>s.score=9999
ValueError

3.多重繼承(即事先定義好類,同時不能一位的分類,這樣子類就可以繼承很多方法和屬性!)

4.定制類(即對類添加一些需要的方法)

形如XXX的變量或者函數(shù)名要注意,這些在python中是有特殊用途的。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容