是否有一个函数,我可以写,但作为一个函数?
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;调用函数?
答案 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)