Python 使用面向对象的方法传递函数作为参数的等效方法是什么
我有一个python程序,其中包含一个类,该类将函数作为Python 使用面向对象的方法传递函数作为参数的等效方法是什么,python,oop,first-class-functions,Python,Oop,First Class Functions,我有一个python程序,其中包含一个类,该类将函数作为\uuuu init\uuu方法的参数。此函数作为属性存储,并在类中的不同位置使用。传入的函数可能有很大的不同,传入一个键,然后从一组预定义函数中进行选择不会提供相同程度的灵活性 现在,如果一长串这样的问题不酷,我道歉,但是 在函数不是第一类对象的语言中,它们是实现这一点的标准方法吗 在这方面,模块(如smalltalk或objective-C)算是函数吗 在这些语言中,块是实现这一点的最佳方式吗 如果没有街区怎么办 能否在运行时添加新方
\uuuu init\uuu
方法的参数。此函数作为属性存储,并在类中的不同位置使用。传入的函数可能有很大的不同,传入一个键,然后从一组预定义函数中进行选择不会提供相同程度的灵活性
现在,如果一长串这样的问题不酷,我道歉,但是
- 在函数不是第一类对象的语言中,它们是实现这一点的标准方法吗
- 在这方面,模块(如smalltalk或objective-C)算是函数吗
- 在这些语言中,块是实现这一点的最佳方式吗
- 如果没有街区怎么办
- 能否在运行时添加新方法
- 在哪种语言中这是可能的(并且很容易)
- 或者用一个方法创建一个对象来执行所需的操作会更好吗
- 如果我想传递很多函数,我会创建很多单例对象吗李>
- 这会被认为是一种更面向对象的方法吗 <> Ly>有人会在Python中这样做吗?函数是第一类对象?
- 我只想回答你的一些问题
正如他们在Scheme社区中所说,“对象是穷人的闭包”(闭包是一级函数)。块通常只是闭包的语法糖。对于没有闭包的语言,存在各种解决方案
一个常见的解决方法是使用运算符重载:C++有一个函数对象的概念,它定义了一个成员<代码>操作程序()/<代码>(“操作符函数调用”)。Python有一个类似的重载机制,您可以在其中定义
\uuuuu调用
:
class Greeter(object):
def __init__(self, who):
self.who = who
def __call__(self):
print("Hello, %s!" % who)
hello = Greeter("world")
hello()
是的,您可以考虑在Python中使用这个函数,而不是在对象中存储函数,因为函数不能。
在没有运算符重载的语言中,您将看到类似Guava的界面。我将回答您的一些问题 正如他们在Scheme社区中所说,“对象是穷人的闭包”(闭包是一级函数)。块通常只是闭包的语法糖。对于没有闭包的语言,存在各种解决方案
一个常见的解决方法是使用运算符重载:C++有一个函数对象的概念,它定义了一个成员<代码>操作程序()/<代码>(“操作符函数调用”)。Python有一个类似的重载机制,您可以在其中定义
\uuuuu调用
:
class Greeter(object):
def __init__(self, who):
self.who = who
def __call__(self):
print("Hello, %s!" % who)
hello = Greeter("world")
hello()
是的,您可以考虑在Python中使用这个函数,而不是在对象中存储函数,因为函数不能。
在没有运算符重载的语言中,您将看到类似Guava的界面。您可以使用。基本上,传入一个具有已知接口但行为不同的对象。它类似于传递函数,但它被包装在一个对象中 您可以使用。基本上,传入一个具有已知接口但行为不同的对象。它类似于传递函数,但它被包装在一个对象中 我不明白你所说的“等效……使用面向对象的方法”是什么意思。在Python中,既然函数是(正如您所说的)一级对象,那么将函数作为参数传递怎么不是“面向对象的” 在函数不是第一类对象的语言中实现这一点的标准方法是什么 我想说的是,只有在某种程度上,函数的标准方式不能成为一级对象 <>在C++中,通常创建另一个类,通常称为函子或函数,它定义了<>代码>操作程序()/>代码的重载,允许实例像语法一样使用函数。然而,通常也可以使用普通的旧函数指针。指针和指针函数都不是一级对象,但接口足够丰富 这与通过模板实现的“特殊多态性”很好地吻合;您可以编写实际上并不关心是否传递类实例或函数指针的函数 类似地,在Python中,您可以通过为类定义
\uuuu调用
方法,将对象注册为可调用
在这方面,模块(如smalltalk或objective-C)算是函数吗
我想说是的。在Python中,lambda至少和函数一样重要,实际上更重要,因为它们不像Python中的lambda那样被削弱
在这些语言中,块是实现这一点的最佳方式吗
这取决于你需要什么
能否在运行时添加新方法?在哪种语言中这是可能的(并且很容易)
为自己的编译器提供内省和运行时访问的语言。Python是合格的
然而,到目前为止,这个问题并没有表现出来,这表明有必要跳过这样的障碍。当然,对于一个新类,有些语言比其他语言需要更多的样板文件
或者用一个方法创建一个对象来执行所需的操作会更好吗
这是相当标准的
如果我想传递很多函数,我会创建很多单例对象吗
您这样说,就好像如果不编写成吨的样板来阻止自己这样做,您可能会意外地创建多个类实例 这会被认为是一种更面向对象的方法吗 同样,我无法理解你对“面向对象”这个术语的理解。这并不意味着“创建大量对象” 有人会在Python中这样做,函数是第一类对象吗?< /P> 并非不需要类可以做而函数不能做的额外事情。与d