首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >自动设置python中的getter、setter和getter

自动设置python中的getter、setter和getter
EN

Stack Overflow用户
提问于 2013-12-13 12:08:23
回答 3查看 4.7K关注 0票数 9

好的,我一直在阅读有关在Python中使用@property装饰器的文章,而不是用于获取、设置和删除的特定方法。下面显示了一些示例代码。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Person(object):

    def __init__(self):

        self._firstName = None
        self._lastName = None
        self._age = None

    @property
    def firstName(self): return self._firstName
    @firstName.setter
    def firstName(self, val): self._firstName = val
    @firstName.deleter
    def firstName(self): del self._firstName

    @property
    def lastName(self): return self._lastName
    @lastName.setter
    def lastName(self, val): self._lastName = val
    @lastName.deleter
    def lastName(self): del self._lastName

    @property
    def age(self): return self._age
    @age.setter
    def age(self, val): self._age = val
    @age.deleter
    def age(self): del self._age

Peter = Person()

Peter.firstName = 'Peter'
Peter.lastName = 'Smith'
Peter.age = 21

print ' '.join([Peter.firstName, Peter.lastName])

如您所见,示例中的大部分代码都用于定义方法。

我的问题是,是否有一种方法可以为我的每个变量自动分配getter、setter和deleter?在我的实际代码中,我有更多的变量,似乎有很多重复的代码设置每个方法。

我意识到,对于简单的情况,这可能是不必要的,但是,如果我决定增加类的复杂性,那么现在我更愿意编写这些方法。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-12-13 12:20:42

保持简单。

如果您有类似的函数,只需使用一个可公开访问的变量即可。这就是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Person(object):
    def __init__(self):
        self.firstName = None
        self.lastName = None
        self.age = None

完全没问题。考虑到这种用法,一种更好的方法是要求数据作为构造函数的一部分,因此:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Person(object):
    def __init__(self, firstName, lastName, age):
        self.firstName = firstName
        self.lastName = lastName
        self.age = None

person = Person('Peter', 'Smith', 21)

如果您关心的是哪个名称,您可以始终具体如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
person = Person(firstName='Peter', lastName='Smith', age=21)

将来,如果需要使其变得更复杂,可以在需要的地方添加getter/setter。

另一个考虑因素是,给定构造函数,可以在Person对象上创建字符串转换函数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def __str__(self):
    return ' '.join([self.firstName, self.lastName])

这样,您就可以像这样使用它:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
person = Person(firstName='Peter', lastName='Smith', age=21)
print(person)

所以您不需要知道它是如何在内部实现的。

另一个考虑是,中国/日本的名字放在姓氏的第一位,人们可以有多个姓氏(尤指姓氏)。在西班牙),可以有中间名。

票数 5
EN

Stack Overflow用户

发布于 2013-12-13 12:13:29

属性装饰器的全部目的是使您不需要从一开始就定义它。直接访问属性与通过属性访问属性的语法完全相同。所以你应该把它完全排除在外,直到你真的有了复杂的逻辑,然后才会变成属性。

票数 2
EN

Stack Overflow用户

发布于 2013-12-13 12:14:38

手动设置器和删除器定义是一种明确的方式,用于表示“我花费了大量时间创建这个接口,您可以自由设置、删除和获取该属性,而不必担心破坏代码”。

否则,您可以简单地使用实例变量而不使用属性修饰器。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def __init__(self):

    self.firstName = None
    self.lastName = None
    self.age = None

另外,您可能希望查看PEP-8中的pythonic变量命名和代码样式设置约定。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20575094

复制
相关文章
getter和setter怎么用_python setter
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/14
3870
Java Getter和Setter
Author:杭州电子科技大学 2016级管理学院 工商管理 唐涛 16011324@hdu.edu.cn
用户3906512
2019/10/05
7K2
getter与setter
getter是一个获取某个属性的值的方法,setter是一个设定某个属性的值的方法。
WindRunnerMax
2020/08/27
7450
计算属性的setter和getter
        刚才通过计算lastName和firstName获取了整个姓名,当时我们只是通过一直的data对象中属性进行合成的,这个也就是计算属性(computed)的get方法(默认),实质上还有一个set方法,我们来看一下getter和setter;
十月梦想
2018/10/09
1.2K0
Vue引发的getter和setter
看着文档研究了一下vue的双向数据绑定,打印出Vue实例下的data对象里的属性时,发现了一个有趣的事情: 它的每个属性都有两个相对应的get和set方法,我觉的这是多此一举的,于是去网上查了查Vue
李文杨
2018/03/14
1.6K0
Vue引发的getter和setter
【Groovy】Groovy 方法调用 ( Java 类成员及 setter 和 getter 方法设置 | Groovy 类自动生成成员的 getter 和 setter 方法 )
创建标准的 Java 类 , 需要将成员变量设置为私有成员 , 并且为其定义 getter 和 setter 方法 ;
韩曙亮
2023/03/30
1.2K0
【Groovy】Groovy 方法调用 ( Java 类成员及 setter 和 getter 方法设置 | Groovy 类自动生成成员的 getter 和 setter 方法 )
python @property 设置只读属性 重写 getter setter 方法
@property广泛应用在类的定义中,可以让调用者写出简短的代码,就可以重写属性的 get 和 set 方法,同时保证对参数进行必要的检查,这样,程序运行时就减少了出错的可能性。
onety码生
2018/11/21
2.6K0
盘点JavaScript中getter()和setter()函数的使用
第一种是 数据属性。已经知道如何使用它们了。到目前为止,使用过的所有属性都是数据属性。
前端进阶者
2021/09/10
1.7K0
盘点JavaScript中getter()和setter()函数的使用
js对象属性的getter和setter
版权声明:本文为吴孔云博客原创文章,转载请注明出处并带上链接,谢谢。 https://blog.csdn.net/wkyseo/article/details/53996012
空空云
2018/09/27
3.2K0
通过getter获取setter函数
放在:https://gitee.com/dromara/stream-query
阿超
2023/06/23
1440
TW洞见〡getter和setter的那些事
文章作者来自ThoughtWorks:佟达 相信每一个以Java或者C++作为编程入门语言的程序员,一定会记得一条金科玉律:字段(Filed)要声明成private,如果要读取或修改字段,就声明一些公
ThoughtWorks
2018/04/16
9010
TW洞见〡getter和setter的那些事
Getter & Setter:使用还是废弃
私有变量 为什么我们要使用私有的实例变量呢? 因为我们不希望其他类直接的依赖于这些变量。而且在心血来潮时,我们还可以灵活的修改变量类型和实现。 然而,为什么程序员们都自动在对象中加入getter和setter方法,以此对外暴露私有变量,就如同这些变量是公有的一样? 存取方法 存取方法(又被称为getters和setters)是一些可以用来读写对象实例变量值的方法。 为什么使用存取方法? 在类中使用存取方法而非直接暴露属性是有理由的。 Getter和Setter使得API更加的稳定。 比如,假设类中有一个
java思维导图
2018/03/15
1.3K0
Getter & Setter:使用还是废弃
通过getter和setter方法访问和修改
2.setter方法可以执行错误检查,比如检查数据是否合乎规范,输入的age是否小于0,直接对域操作则没这种优势
用户7999227
2021/10/08
9870
IDEA 自动折叠隐藏 getter setter 小技巧
大部分小伙伴会推荐 lombok,当然我也使用,加上 @Data、@Getter、@Setter 注解,确实很方便。
程序员小航
2023/09/21
4680
IDEA 自动折叠隐藏 getter setter 小技巧
vue之计算属性的setter和getter
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <div id="app"> <h2>{{fullName}}</h2> </div> <script src="../js/vue.js"></script> <script> const app = new Vue({
兮动人
2021/06/11
8360
vue之计算属性的setter和getter
Groovy 创建索引属性Getter和Setter方法
在Groovy中,我们可以在类中定义属性,并自动在类文件中生成这些属性的getter和setter方法。 如果我们有一个Collection类型属性,我们通常会获得此属性的get/set方法。 但是根据JavaBean规范,我们可以将Collection类型属性定义为索引属性。 这意味着我们需要一个带索引参数的额外get/set方法,因此我们可以直接在属性中设置元素的值:
白石
2019/09/18
2K0
【Kotlin】类的初始化 ① ( 成员属性 | Kotlin 自动为成员字段生成 getter 和 setter 方法 | 手动设置成员的 getter 和 setter 方法 | 计算属性 )
定义 Kotlin 类 , 在 类中 定义成员属性 , 会自动生成 getter 和 setter 方法 ;
韩曙亮
2023/03/30
2.1K0
【Kotlin】类的初始化 ① ( 成员属性 | Kotlin 自动为成员字段生成 getter 和 setter 方法 | 手动设置成员的 getter 和 setter 方法 | 计算属性 )
点击加载更多

相似问题

自动getter/setter

12

php自动setter和getter

20

Java getter和setter自动?

42

设置getter和setter方法

40

TypeScript中的自动getter和setter

23
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文