openKylin论坛

 找回密码

关于python对象属性修改 [复制链接]

本帖最后由 小叶冰城 于 2016-3-23 08:51 编辑

help!!!大大大神们,我有个问题
问题描述:
定义一个class A
class A():
    x = y
    def change(self,value):
        self.x = value


对于A类的一个实例a
a = A()
现在要改变a中属性x的值
a.x = value
a.change(value)
上面两种方法哪个更好?为什么?
非常感谢

楼主
发表于 2016-3-22 20:47:01
回复

使用道具 举报

关于python对象属性修改 [复制链接]

本帖最后由 小叶冰城 于 2016-3-22 21:06 编辑

个人觉得,函数调用,会涉及到函数参数在栈中内存的分配,是不是会耗费一些时间,所以a.x=value 速度更快,但是貌似违背了面向对象的封装特性?so 该怎么选择?
沙发
 楼主| 发表于 2016-3-22 21:05:29
回复

使用道具 举报

关于python对象属性修改 [复制链接]

选择 第二种
板凳
发表于 2016-3-23 17:33:14
回复

使用道具 举报

关于python对象属性修改 [复制链接]

本帖最后由 Lurking 于 2016-3-24 13:23 编辑

第二种。没有违背。因为你用到了类,类是一种封装。
A类封装了成员x,并对x进行了初始化,也就是x的value是y。
还定义了一个对该成员的一个操作的函数,这算是一个最简单的委托模式,
该函数也是对外提供的一个用于处理x这个成员的“接口”。
最基本的封装其实就是不想让其他人员来直接操作属性或者说成员,然后
对外暴露一个函数或者接口来对指定的属性或者成员进行操作。
你的demo是符合最基本原理的。
地板
发表于 2016-3-23 22:56:39
回复

使用道具 举报

关于python对象属性修改 [复制链接]

要pythonic,就是直接a.x=value来赋值,没有必要加个无实际过程的change方法。
5#
发表于 2016-3-24 17:11:52
回复

使用道具 举报

关于python对象属性修改 [复制链接]

公子文彬 发表于 2016-3-24 17:11
要pythonic,就是直接a.x=value来赋值,没有必要加个无实际过程的change方法。

有道理
6#
 楼主| 发表于 2016-3-25 11:32:24
回复

使用道具 举报

关于python对象属性修改 [复制链接]

Lurking 发表于 2016-3-23 22:56
第二种。没有违背。因为你用到了类,类是一种封装。
A类封装了成员x,并对x进行了初始化,也就是x的value ...

恩  非常感谢。。我还是觉得用A.x = value 破坏了封装特性,  只能说怪就怪该死的x是public
7#
 楼主| 发表于 2016-3-25 11:34:41
回复

使用道具 举报

关于python对象属性修改 [复制链接]


斑竹大人 why?
8#
 楼主| 发表于 2016-3-25 11:35:43
回复

使用道具 举报

关于python对象属性修改 [复制链接]

公子文彬 发表于 2016-3-24 17:11
要pythonic,就是直接a.x=value来赋值,没有必要加个无实际过程的change方法。

谢谢公子文彬
9#
 楼主| 发表于 2016-3-25 11:36:54
回复

使用道具 举报

关于python对象属性修改 [复制链接]

本帖最后由 Lurking 于 2016-3-26 21:21 编辑

一般情况下,不要把类中的属性设为公共的,除非这个属性是当做一种标签需要在其他类中直接使用,抑或这个类专门用来存储一些公开的属性。
10#
发表于 2016-3-26 15:53:01
回复

使用道具 举报

openKylin

GMT+8, 2024-4-29 21:11 , Processed in 0.028004 second(s), 17 queries , Gzip On.

Copyright ©2022 openKylin. All Rights Reserved .

ICP No. 15002470-12 Tianjin

快速回复 返回顶部 返回列表