@property在python类中的应用

1.在类中,有时需要限制输入的内容,可以用一个set来输入需要的内容,用get来取得输入的内容

2.其实说白,上述所说的方法就是用来检查输入内容,让人们不能随心所欲的设置了。

参见下面的例子:

1 class Student(object):
2     def get_score(self):
3         return self.__score
4     def set_score(self, value):
5         if not isinstance(value, int):
6             raise ValueError("score must be an integer!")
7         if value < 0 or value > 100:
8             raise ValueError("score must between 0 ~100")
9         self.__score = value调用方法如下:>>>s = Student()>>>s.set__score(89)>>>s.get_score()89

虽然上面的函数可以检查参数,但是略显复杂。没有直接调用属性的这么简单直接。

有没有既检查参数,又可以用类似属性这样的简单的方法来访问类的变量。万能的python来说,这是可以解决的。。。。

Python内置的@property装饰器就是负责把一个方法变成属性的。

方法如下:

 1 class Student(object):
 2     @property
 3     def score(self):
 4         return self._score                     ###(getter方法)
 5     @score.setter                              ###(@property装饰器本身又创建了另外一个装饰器,@score.setter)
 6     def score(self, value):
 7         if not isinstance (value, int):
 8             raise ValueError("score must be an integer")
 9         if value < 0 or value > 100:
10             raise ValueError("score must be between 0~100")
11         self._score = value                    ###(setter方法)调用方法如下:>>>s = Student()>>>s.score = 60>>>s.score60

###利用@property还可以只定义只读属性,既只定义getter方法;

setter方法可以认为是可写属性

### 注意@property的位置

时间: 2024-08-14 09:53:00

@property在python类中的应用的相关文章

Python 类中的 self?

什么是 self ? 它是类实例自身的引用.其他语言通常使用一个名为 this 的标识符 --<Python核心编程> 如何定义类: class ClassName(base_class[es]):  (1) "optional documentation string" static_member_declarations #类静态成员声明 method_declarations #类方法声明 (1) 括号内位基类,如果没有,就实用object作为基类 .....待续 P

两幅图说明python类中self的含义

总结:self是对于对象自身的引用.这里的圆括号里的self也可以换成其它你想要的任意名称,只是self更形象和通用些. 两幅图说明python类中self的含义

Python类中实例属性的通用显示工具

0.说明 以下的思想方法非常有用,可以帮助你在Python开发提高开发和维护效率,所以可能的话,请仔细琢磨一下其中的代码. 之前在用Python编写一个类时,为了显示的友好性,总是需要在每个类中重载__str__或者__repr__方法,现在有了更好的方法,不需要在每个类中都这么做了,下面给出的方法非常实用. 下面使用的例子使用的Python版本都是Python3.5,但实际上在Python2.7中进行也没有任何影响. 1.正常情况下类实例的不友好显示 在Python中编写一个类时,由于没有重载

python类中super()和__init__()的区别

本文和大家分享的主要是python开发中super()和__init__()的区别,希望通过本文的分享,对初学者学习这部分内容有所帮助. 1.单继承时super()和__init__()实现的功能是类似的 class Base(object): def __init__(self): print 'Base create' class childA(Base): def __init__(self): print 'creat A ', Base.__init__(self) class chi

python 类中的某个函数作为装饰器

在python的类中,制作一个装饰器的函数, class A: def wrapper(func): ###装饰器 def wrapped(self,*arg,**kwargs) ... return wrapped @ wrapper ###装饰mix def mix(): ... 当调用mix的时候,self.mix() ,会将self等参数传入 wrapper 中来吗?答案为否. 当wrapper作为装饰器的并且@wrapper这种方式作为装饰的时候,wrapper就跟普通的函数一样,仅仅

python类中几个特殊方法

class TT: def __init__(self): print "__init__" def __call__(self): print "__call__" def __str__(self): return "__str__" def __int__(self): return "__int__" def __add__(self,other): return "__add__" def __s

Python类中的魔法方法之 __slots__

在类中每次实例化一个对象都会生产一个字典来保存一个对象的所有的实例属性,这样非常的有用处,可以使我们任意的去设置新的属性. 每次实例化一个对象python都会分配一个固定大小内存的字典来保存属性,如果对象很多的情况下会浪费内存空间. 可通过__slots__方法告诉python不要使用字典,而且只给一个固定集合的属性分配空间 class Foo(object): __slots__ = ("x","y","z") def __init__(sel

Python类中反射的作用

#coding:utf-8 ''' #反射的基本用法: hasattr 判断一个方法是否存在于实例中 getattr 指定一个方法名字,获取该方法的内存地址,加"()"括号并可执行 ''' import sys class WebServer(object): def __init__(self,host,port): self.host = host self.port = port def start(self): print("Server is starting...

Python类中的魔法方法

1.getitem 方法 使用这个方法最大的印象就是调用对象的属性可以像字典取值一样使用中括号['key']使用中括号对对象中的属性进行取值.赋值或者删除时,会自动触发对应的__getitem__.__setitem__.__delitem__方法代码如下: class Foo(object): def __init__(self): self.name = 'jack' def __getitem__(self,item): if item in self.__dict__: # item =