【Python】@property的用法

  设想我们要给一个student()类的一个实例s,添加一个score的属性,比如:

  s.score=999999

  这个值明显是不合理的,但是它却是可行的,怎么能改变这种情况?我们能想到的就是用类方法

  class student:

    def setsore:

      #code

    def getsocre:

      #code

  这样是可行的,但是没有使用属性直接设置方便,这时候就可以用到@property装饰器了。

  当使用@property装饰器对getattr方法进行装饰的时候,会自动产生一个对setattr方法

进行装饰的装饰器getattr.setattr  这样,就可以在实例中直接使用属性对getattr和setattr方

法进行调用

例子:

 1 class screen:
 2     @property
 3     def width(self):
 4         return self._width
 5
 6
 7     @width.setter          #装饰getwidth方法,即装饰width方法产生的装饰器
 8     def width(self, width):    #注意,在这里setwidth方法和getwidth方法名一样
 9         self._width = width    
10
11
12     @property
13     def height(self):
14         return self._height
15
16
17     @height.setter
18     def height(self, h):
19         self._height = h
20
21
22     @property
23     def resolution(self):
24         return self._width * self._height
25
26 s = screen()
27 s.width = 1024
28 s.height = 768
29 print(s.resolution)
30 assert s.resolution == 786432, ‘1024 * 768 = %d ?‘ % s.resolution

参考资料:廖雪峰的官方网站http://www.liaoxuefeng.com/

时间: 2024-10-12 16:36:36

【Python】@property的用法的相关文章

Python中“*”和“**”的用法 || yield的用法 || ‘$in’和'$nin' || python @property的含义

一.单星号 * 采用 * 可将列表或元祖中的元素直接取出,作为随机数的上下限: import random a = [1,4] print(random.randrange(*a)) 或者for循环输出: import random a = [1,4] for i in range(*a): print(i) ''' result : 1 2 3 ''' 二.双星号 ** 双星号 ** 可将字典里的“值”取出,如下例 class Proxy(object): def __init__(self,

python property

python property 在2.6版本中,添加了一种新的类成员函数的访问方式--property. 原型 class property([fget[, fset[, fdel[, doc]]]]) fget:获取属性 fset:设置属性 fdel:删除属性 doc:属性含义 用法 1.让成员函数通过属性方式调用 class C(object): def __init__(self): self._x = None def getx(self): return self._x def set

Python高阶用法总结

目录 1. lambda匿名函数 1.1 函数式编程 1.2 应用在闭包 2. 列表解析式 3. enumerate内建函数 4. 迭代器与生成器 4.1 迭代器 4.3 生成器 5. 装饰器 前言: 接触python有一段时间了,从开始的看菜鸟的python教程,看了一些视频,一些书.很多人感觉python很简单,确实相比其他语言,python可能稍微简单一点,但是不能说只学了python基础语法就说自己python水平可以了.最近在阅读YOLOv3的pytorch版本源码,就遇到很多瓶颈,很

python   __name__=='__main__' 用法

python 文件的后缀为.py,比如 name.py python 文件可以直接执行,也可以被导入.调用,比如import name; script 1: #!/bin/python # Filename:name.py if __name__=='__main__':     print 'This program is being run by itself' else:     print 'I am being imported from another module' script

python之函数用法capitalize()

# -*- coding: utf-8 -*- #python 27 #xiaodeng #python之函数用法capitalize() #capitalize() #说明:将字符串的第一个字母变成大写,其他字母变小写. ''' capitalize(...) S.capitalize() -> string Return a copy of the string S with only its first character capitalized. ''' #案例 str='xiaoden

python之函数用法setdefault()

# -*- coding: utf-8 -*- #python 27 #xiaodeng #python之函数用法setdefault() #D.get(k,d) #说明:k在D中,则返回 D[K],如果k不在D中,则返回d值 #D.get(k,d), also set D[k]=d if k not in D ''' >>> help(dict.setdefault) Help on built-in function setdefault: setdefault(...) D.set

python之函数用法islower()

# -*- coding: utf-8 -*- #python 27 #xiaodeng #python之函数用法islower() #http://www.runoob.com/python/att-string-islower.html #islower() #说明:检测字符串是否都由小写字母组成 str = "THIS is string example....wow!!!" print str.islower()#False str = "this is string

python之函数用法xrange()

# -*- coding: utf-8 -*- #python 27 #xiaodeng #python之函数用法xrange() #xrange() #说明:返回一个生成器 #xrange做循环的性能比range好,尤其是返回很大的时候.除非要返回一个列表,则用range. ''' class xrange(object) | xrange(stop) -> xrange object | xrange(start, stop[, step]) -> xrange object | | Li

python之函数用法startswith()

# -*- coding: utf-8 -*- #python 27 #xiaodeng #python之函数用法startswith() #http://www.runoob.com/python/att-string-startswith.html #startswith() #说明:返回布尔值,用于检查字符串是否是以指定子字符串开头,如果是则返回 True,否则返回 False. ''' startswith(...) S.startswith(prefix[, start[, end]]

python之函数用法globals()

# -*- coding: utf-8 -*- #python 27 #xiaodeng #python之函数用法globals() #globals() #说明:在当前作用域下,查看全局变量 ''' globals(...) globals() -> dictionary Return the dictionary containing the current scope's global variables. ''' #案例 b='xiaodeng' print globals#<buil