如何在python类中创建更好的变量接口
我想要一个变量做的不仅仅是在我设置它时设置它。 界面要尽可能干净 肖特:我想要的是:如何在python类中创建更好的变量接口,python,class,variables,getter-setter,Python,Class,Variables,Getter Setter,我想要一个变量做的不仅仅是在我设置它时设置它。 界面要尽可能干净 肖特:我想要的是: # have class with a variable that I can access: print myInstance.var 42 # change the variable myInstance.var = 23 # have the change kick off another method: self.var was changed: 23!! 嗯。。所以我可以做的是:使用变量和sette
# have class with a variable that I can access:
print myInstance.var
42
# change the variable
myInstance.var = 23
# have the change kick off another method:
self.var was changed: 23!!
嗯。。所以我可以做的是:使用变量和setter方法:
class Test:
def __init__(self):
self.var = 1
print( 'self.var is: ' + str(self.var) )
def setVar(self, value):
self.var = value
print( 'self.var changed: ' + str(self.var) )
t = Test()
self.var is: 1
# so I have t.var at hand:
print t.var
1
# and change it this way
t.setVar(5)
self.var changed: 5
但是我有两件不同的事情要处理。。
好的,我可以制作一个与var交互的方法:
class Test:
def __init__(self):
self.var = 1
print( 'self.var is: ' + str(self.var) )
def method(self, value=None):
if value == None:
return self.var
self.var = value
print( 'self.var changed: ' + str(self.var) )
t = Test()
self.var is: 1
# to get the value then:
print t.method()
1
# to set it:
t.method(4)
self.var changed: 4
# and verifiy:
print t.method()
4
这已经很好了。我在其他语言的不同帖子中看到过。但我不知道。python中有更好的解决方案吗
也许我有点偏执,但对我来说,只要做t.var=5
并开始做一些事情就好了。你可以使用。注意,如果setter方法很昂贵,最好使用一个方法。人们期望属性访问速度快
class Foo(object):
def __init__(self):
self._var = None
@property
def var(self):
return self._var
@var.setter
def var(self, whatever):
self._var = whatever
do_whatever()
x = Foo()
print x.var # prints None
x.var = 2 # sets x.var and does whatever
你可以用一个。注意,如果setter方法很昂贵,最好使用一个方法。人们期望属性访问速度快
class Foo(object):
def __init__(self):
self._var = None
@property
def var(self):
return self._var
@var.setter
def var(self, whatever):
self._var = whatever
do_whatever()
x = Foo()
print x.var # prints None
x.var = 2 # sets x.var and does whatever
我认为您需要python属性。检查。比如:
class Test:
def __init__(self):
self._var = 1
@property
def var(self):
return self._var
@var.setter
def var(self, value):
# add stuff here that you want to happen on var assignment
self._var = value
我认为您需要python属性。检查。比如:
class Test:
def __init__(self):
self._var = 1
@property
def var(self):
return self._var
@var.setter
def var(self, value):
# add stuff here that you want to happen on var assignment
self._var = value
是的,我就是这么想的。但它是为用户界面的东西,所以调用是相当罕见的!非常感谢。谢谢你的评论!是的,我就是这么想的。但它是为用户界面的东西,所以调用是相当罕见的!非常感谢。谢谢你的评论!也谢谢你@Xephryous!这也是一个伟大的链接!刚刚检查过!也谢谢你@Xephryous!这也是一个伟大的链接!刚刚检查过!