@property与@xxx.setter的用法

类中@property与@xxx.setter的方法介绍。

简单说,@property就是将定义的函数(方法)当作属性对象使用,不需要像调用函数那样去调用,而@xxx.setter是为@xxx的这样函数进行值的设置,

就是可以用@xxx.setter为xxx的函数进行值的更改,在@xxx.setter声明下的函数名字可以不用xxx相同的函数名。

# property装饰器# 作用: 将一个get方法转换为对象的属性。 就是 调用方法改为调用对象# 使用条件: 必须和属性名一样

# setter方法的装饰器:# 作用:将一个set方法转换为对象的属性。 就是 a调用方法改为调用对象# 使用方法:@属性名.setter

class Person:    def __init__(self,name):        self._name = name    # 利用property装饰器将获取name方法转换为获取对象的属性    @property    def name(self):        return self._name

    # 利用property装饰器将设置name方法转换为获取对象的属性    @name.setter    def nam(self,name):        self._name = name        self.a=22p = Person(‘小黑‘)print(p.name)   # 原获取 p.neame()  , 现 p.name,已经将函数(方法变成了属性值获取)p.nam = ‘小灰‘ # 原设置 p.name(‘小灰‘)  ,现 p.name = ‘小灰‘,相当于直接用变量命名,给属性值来更改此变量print(p.name)

class Person:    def __init__(self,name):        self._name = name    @property    def name(self):        a=100        return self._name,a    @name.setter    def name(self,name): # name是一个列表,包含2个元素        self._name = name[0] # 第一个元素值赋给self._name        a=name[1] # 第二个值赋给a了,可是在执行上一个name()函数时候会有a=100,因此才不会改变变量的p = Person(‘小黑‘)print(p.name)p.name = [88,99] # 因为执行了a=100,所以执行a=name[1]时,也不会改变输出值print(p.name)

class Person:    def __init__(self,name,bb):        self._name = name        self.a = bb    # 利用property装饰器将获取name方法转换为获取对象的属性    @property    def name(self):

        return self._name,self.a    # 利用property装饰器将设置name方法转换为获取对象的属性    @name.setter    def name(self,name):        self._name = name[0]        self.a=name[1]p = Person(‘小黑‘,100)print(p.name)   # 原获取 p.name()  , 现 p.name,已经将函数(方法变成了属性值获取)p.name = [88,‘小慧‘] # 多个@property的属性输出print(p.name)



原文地址:https://www.cnblogs.com/tangjunjun/p/12078686.html

时间: 2024-10-02 23:03:51

@property与@xxx.setter的用法的相关文章

装饰器@property与@xxx.setter

class Student(): def __init__(self,name,score): self.__name = name self.__score = score @property def name(self): return self.__name @name.setter def name(self,name): self.__name = name s1 = Student('zhang',25) print(s1.name)               #s1.name就相

@property和@x.setter和@x.deleter表示可读可写可删除

@property可以将python定义的函数"当做"属性访问,从而提供更加友好访问方式,但是有时候setter/deleter也是需要的.1>只有@property表示只读.2>同时有@property和@x.setter表示可读可写. 3>同时有@property和@x.setter和@x.deleter表示可读可写可删除. [python] view plain copy class student(object):  #新式类 def __init__(sel

There is no getter for property named xxx' in 'class java.lang.xxx'

在xxxMapper.xml我们使用sql片段来提高sql代码的复用性,当时新手传入参数时常常出现这样的错误: There is no getter for property named xxx' in 'class java.lang.xxx' ①出现的原因:我们实体类中有getter方法,为啥mybatis无法识别呢,原来Mybatis默认采用ONGL解析参数,所以会自动采用对象树形式来取java.lang.xxx.xxx值,所以引起报错. ②解决方法: 1)将传入参数改为_paramete

Mybatis中传参包There is no getter for property named 'XXX' in 'class java.lang.String'

一.发现问题 <select id="queryStudentByNum" resultType="student" parameterType="string"> select num,name,phone from student <where> <if test = " num!=null and num!='' "> AND num = #{num} </if> <

There is no getter for property named &#39;xxx&#39; in &#39;class java.lang.String

报错信息: org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'investTime' in 'class java.lang.String' at org.mybatis.spring.MyBatisExceptionTranslator.tra

There is no getter for property named &#39;XXX&#39; in class &#39;aaa.bbb.ccc&#39;(终极骚操作的解决方法)

使用SpringBoot整合Mybatis时,遇到了像标题的异常,博主当时是用Bean类对象作为参数的,所以百度了很久都没有建设性答案.贴一下报错的xxxDao文件和xxxMapper.xml文件: package com.cjs.dao; import com.cjs.bean.User; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.ut

@property 取代getter setter方法

利用私有属性 class Money(object): def __init__(self): self.__money = 0 def getMoney(self): return self.__money def setMoney(self, value): if isinstance(value, int): self.__money = value else: print("error:不是整型数字") 定义一个property属性 class Money(object): d

Python的property _getter和setter方法【转】

当给属性赋值的时候,使用实例.属性=属性值的方式显然把属性暴露出来了,并且也无法对属性值进行限制检查,java中提供了setter和getter方法,那么python是如何做的呢?更多内容请参考:Python学习指南 属性赋值方法 在绑定属性时,如果我们直接把属性暴露出去,虽然写起来很简单,但是,没办法检查参数,导致可以把成绩随便改: s = Student() s.score = 9999 上面的赋值显然不符合实际情况,为了限制score的范围,可以通过一个set_score()方法来设置成绩

MySQL SELECT xxx INTO OUTFILE用法

1.导出数据报错 mysql> SELECT * INTO OUTFILE '/tmp/t.txt' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n' FROM t; ERROR 1290 (HY000): The MySQL server is running with the --secure-file-priv option so it cannot execute this st