小白學python之使用@property_學習筆記

本文以廖雪峯的官方網站爲參考來學習python的。其學習鏈接爲廖雪峯小白學python教程

本文是學習到python的實例屬性和類屬性。參考鏈接廖雪峯python使用@property

class Student(object):

    def get_score(self):
        return self._score

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


s = Student()
s.set_score(60)
print(s.get_score())

運行結果:    60

如果接上代碼   

s.set_score(9999)

則會報錯:

Traceback (most recent call last):
  File "**********", line **, in <module>
    s.set_score(9999)
  File "***********", line **, in set_score
    raise ValueError('score must between 0 ~ 100!')
ValueError: score must between 0 ~ 100!

 

class Student(object):

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

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

s = Student()
s.score = 60
print(s.score)

運行結果:60

加上代碼,

s.score = 9000

就會報錯:

Traceback (most recent call last):
  File "***********", line **, in <module>
    s.score = 9000
  File "***********", line **, in score
    raise ValueError(' score must between 0 ~ 100!')
ValueError:  score must between 0 ~ 100!

筆記

@property 把一個getter方法變成屬性。又創建了另一個裝飾器@score.setter,負責把一個setter方法變成屬性賦值。於是,我們就有了一個可控屬性操作。

還可以定義只讀屬性,只定義getter方法,不定義setter方法就是一個只讀屬性:


class Student(object):

    @property
    def birth(self):
        return self._birth

    @birth.setter
    def birth(self,value):
        self._birth = value

    @property
    def age(self):
        return 2015-self._birth

s = Student()
s.birth = 2000
print(s.birth)
print(s.age)

運行結果:

2000
15

練習

# -*- coding: utf-8 -*-
class Screen(object):
    @property
    def width(self):
        return self._width
    @width.setter
    def width(self,value):
        self._width = value

    @property
    def height(self):
        return self._height
    @width.setter
    def height(self,value):
        self._height = value

    @property
    def resolution(self):
        return self._width * self._height

運行結果:

resolution = 786432
測試通過!

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章