我上课了:
class Foo():
def bar(name):
return something
我希望
foo = Foo()
foo.name
返回与foo.bar('name')相同的内容。有可能吗?
答案 0 :(得分:3)
如果该属性不存在,这将自动使用bar
:
class Foo(object):
def bar(self, name):
return name
def bar2(self, attr, value):
print attr, value
def __getattr__(self, attr):
return self.bar(attr)
def __setattr__(self, attr, value):
self.bar2(attr, value)
foo = Foo()
print foo.name
foo.name = 'not name'
答案 1 :(得分:1)
正如您现在所描述的那样,name
仅存在于函数bar
的范围内,因此Foo
除非您将其存储在其范围内,否则无法直接访问它。最简单的解决方案是创建一个名为name
的成员字段,并将其值设置为bar
。
class Foo():
def __init__(self):
self.name = None
def bar(self, name):
self.name = name
return something
答案 2 :(得分:0)
宣布你的班级:
class Foo:
def bar(self, name):
return 'something'
您可以将方法分配给属性。
foo = Foo()
foo.name = foo.bar
如果您愿意,可以在构造函数中执行此操作。
答案 3 :(得分:0)
您的类应具有存储名称的属性。
试试这个
#!/usr/bin/python
class Foo:
def __init__(self):
self.name = ''
def bar(self, name):
self.name = name
return "name via bar(): %s" % name
f = Foo()
print f.bar("Jackson")
print f.name