如何在python类中作为成员变量访问成员函数?

如何在python类中作为成员变量访问成员函数?,python,class,Python,Class,我有一门课: class Foo(): def bar(name): return something 我想要一个 foo = Foo() foo.name 返回与foo.bar('name')相同的值。有可能吗?正如您现在所描述的,名称仅存在于函数栏的作用域中,因此Foo无法直接访问它,除非您将其存储在其作用域中。最简单的解决方案是创建一个名为name的成员字段,并在bar中设置其值 class Foo(): def __init__(self):

我有一门课:

class Foo():
    def bar(name):
        return something
我想要一个

foo = Foo()
foo.name 

返回与foo.bar('name')相同的值。有可能吗?

正如您现在所描述的,
名称
仅存在于函数
的作用域中,因此
Foo
无法直接访问它,除非您将其存储在其作用域中。最简单的解决方案是创建一个名为
name
的成员字段,并在
bar
中设置其值

class Foo():
    def __init__(self):
        self.name = None

    def bar(self, name):
        self.name = name
        return something

正如您现在所描述的,
name
仅存在于函数
bar
的作用域中,因此
Foo
无法直接访问它,除非您将其存储在其作用域中。最简单的解决方案是创建一个名为
name
的成员字段,并在
bar
中设置其值

class Foo():
    def __init__(self):
        self.name = None

    def bar(self, name):
        self.name = name
        return something
申报你的班级:

class Foo:
    def bar(self, name):
        return 'something'
可以将该方法指定给属性

foo = Foo()
foo.name = foo.bar
如果您愿意,可以在构造函数中执行此操作。

声明您的类:

class Foo:
    def bar(self, name):
        return 'something'
可以将该方法指定给属性

foo = Foo()
foo.name = foo.bar

如果愿意,您可以在构造函数中执行此操作。

如果属性不存在,则会自动使用
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'

如果属性不存在,则会自动使用

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'

类应该有一个属性来存储名称

试试这个

#!/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

类应该有一个属性来存储名称

试试这个

#!/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


但是我不知道成员字段的名字,它也应该使用一个任意的字符串,比如Self.NAME123,但是我不知道成员字段的名称,它也应该使用一个任意的字符串,比如Self.NAME123SATO,你考虑Fo.3是否是一个工作代码?如果不是,然后重新考虑这个问题。@ BasigW狼我希望我们可以有数字属性。Santo,你考虑Fo.3'是一个工作代码吗?如果没有,那就重新考虑这个问题。@BasicWolf我希望我们能有数字属性。你赢了我,投上一票。但是不需要
try
子句:
\uu getattr\uuu
只被调用。你把它和“懒鬼”搞混了,我总是忘了!我习惯于在使用
getattr
.Tkans时捕捉错误。这个很好用。现在,我正在考虑是否可以重载赋值运算符并进行异常操作(foo.name=val将调用bar2(name,val)“SATTO”——这不是C++,Python的''= '不是一个可以超载的操作符。是的,但是代码> > StAdTraceTy[< /C> > /Fract/描述符的效果是一样的,正如我所展示的。你打败了我,有了一个投票权。但是<<代码>尝试子句是不必要的:<代码>在!我非常习惯于在使用
getattr
.Tkans时捕捉错误。这很好。现在我正在考虑是否可以重载赋值运算符并以异常方式执行(foo.name=val将调用bar2(name,val)“SATTO”——这不是C++,Python的''= ''不是一个可以超载的操作符。是的,但是 SuthAtTraceTysfoo.name成为
foo.bar
,他希望
foo.name
成为
foo.bar('name')
。他不希望
foo.name
成为
foo.bar
,他希望
foo.name
成为
foo.bar('name
)。