设置变量python类 - 函数

时间:2014-06-03 16:10:11

标签: python class variables members

是否有一个函数,我可以写,但作为一个函数?

class foo:
    def __init__(self,x):
        self.x = x;

asd = foo(2);
asd.x = 5;
print(asd.x);

但是喜欢:

class foo:
    def __init__(self,x):
       self.x = x;
    def someFunction(self,string,value):
        if(string == 'x'):
           self.x = value;
           print("worked");

 asd = foo(2);
 asd.x = 3; #and "worked" will be printed?

我试过__ set __和__ setattr __但我没有运气; \

设置类变量时有没有办法调用函数? asd.x = 3;调用函数?

2 个答案:

答案 0 :(得分:0)

对于要处理自身属性设置的对象,请使用__setattr__方法。调试相当棘手,所以除非你知道自己在做什么,否则不要这样做。 Good explanation

class Beer(object):
    def __init__(self, adj):
        self.adj = adj

    def __setattr__(self, key, value):
        print '\tSET',key,value
        object.__setattr__(self, key, value)  # new style (don't use __dict__)

b = Beer('tasty')
print 'BEFORE',b.adj
b.adj = 'warm'
print 'AFTER',b.adj
print b.__dict__

输出

    SET adj tasty
BEFORE tasty
    SET adj warm
AFTER warm
{'adj': 'warm'}

答案 1 :(得分:0)

使用属性。每当您尝试访问属性@property时,都会使用由x修饰的方法;当您尝试设置@x.setter的值时,将调用随后由x修饰的方法。基础"私人" attribute _x用于存储getter和setter使用的x的值。

class foo:

    @property
    def x(self):
        return self._x

    @x.setter
    def x(self, value):
        self._x = value
        print("worked")

    def __init__(self, x):
        self._x = x

如果要为getter和setter方法提供更明确的名称,可以跳过装饰器语法:

class foo(object):

    def __init__(self, x):
         self._x = x

    def _get_x(self):
        return self._x

    def _set_x(self, value):
        self._x = value
        print("worked")

    x = property(_get_x, _set_x)