首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

有没有一个函数可以用一个变量来构造一个callable,该变量只包含一个字符串形式的类名?

是的,Python中可以使用内置的getattr()函数和内置的type()函数来实现这个功能。

首先,通过getattr()函数可以根据类名字符串获取到对应的类对象。然后,使用type()函数可以将类对象转换为一个可调用对象,即一个函数。

下面是一个示例代码:

代码语言:txt
复制
def create_callable(class_name):
    class_obj = getattr(__main__, class_name)
    callable_obj = type(class_name, (object,), {})()

    return callable_obj

# 示例类
class MyClass:
    def __call__(self, *args, **kwargs):
        print("Hello, World!")

# 使用示例
class_name = "MyClass"
my_callable = create_callable(class_name)
my_callable()  # 输出:Hello, World!

在上面的示例代码中,create_callable()函数接受一个类名字符串作为参数,并使用getattr()函数获取到对应的类对象class_obj。然后,通过调用type()函数将class_obj转换为可调用对象callable_obj,并返回该对象。

需要注意的是,示例中的类MyClass可以被调用是因为它定义了__call__()方法,这使得实例对象可以像函数一样被调用。如果想要构造的可调用对象具有特定的功能或行为,可以在类中自定义相应的方法。

需要注意的是,这里的示例代码仅用于演示如何实现该功能,实际使用中需要根据具体的场景进行相应的扩展和优化。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

php判断某个方法是否存在函数function_exists (),method_exists()与is_callable()区别与用法解析

()和is_callable() 相比之下,is_callable()函数要高级一些,它接受字符串变量形式方法名作为 第一个参数,如果类方法存在并且可以调用,则返回true。...如果要检测方法是否能被调用,可以给函数传递一个数组而不是方法名作为参数。数组必须包含对象或,以将其作为它一个元素,要检查方法名则作为第二个元素。...如果方法在中存在,函数返回true。 接下来看一段代码: <?...然后还剩下一个function_exists(), 这个比上两个检测强度来讲是最弱 因为 只有一个参数 函数名 $string 只会判断函数有没有被定义 总结一下: function_exists...比较简单点就是判断函数有没有被定义 而method_exists 是判断方法存不存在 is_callable检测参数是否为合法可调用结构 返回值 都是 bool 更多关于PHP相关内容感兴趣读者可查看本站专题

1.1K20

核心编程笔记(14.P

__name__ udf.func_closure包含了自由变量引用单元对象元祖 例,用户自定义函数是"函数"类型 >>> def foo():pass ... >>> type(foo) <type...14.1.3 我们可以利用可调用行创建实例,实例化调用任何参数都会传入到构造函数里 >>> class C(object): ...  ...=")) 14.3.1 callable() callable()是一个布尔函数,确定一个对象是否可以通过函数操作符()调用 >>> callable(dir)#内建函数 True >>> callable...raw_input()以字符串形式,逐字返回用户输入,input()履行相同任务,还把输入作为python表达式进行求值 当用户输入一个列表时,raw_input()返回一个列表字符串描绘,而input.../usr/bin/env python dashes = '\n' + '-' * 50 #50个'-'号(开头换行) #构造一个存储代码字典(不同键对应不同代码),里面变量均用占位符,注意缩进

63710
  • 【转载】Python自省

    ,需要通过参数传递字符串形式输入。...<*__dict__: 包含里可用属性-属性字典;也就是可以使用.属性访问对象。__module__: 包含该类定义模块;需要注意,是字符串形式模块而不是模块对象。...实例(instance)  实例是指实例化以后对象。  -*__dict__: 包含了可用属性-属性字典。  *__class__: 实例对象。...*__module__: 包含函数定义模块;同样注意,是模块而不是模块对象。*__dict__: 函数可用属性;另外也可以用属性func_dict。 ...co_varnames: 所有的局部变量元组。co_filename: 源代码所在文件。co_flags:  这是一个数值,每一个二进制位都包含了特定信息。

    62320

    Python自动化开发学习3-2-匿名函

    lambda没有return,后面的就是返回值 上面的列子我们还是定了一个变量,因为方便后面给参数赋值,这样函数用完后并没有释放空间。把整个函数括起来,后面再写个括号写入参数。...print(any([0,'',False,None]))  # False ascii()把一个对象变成一个可打印字符串形式,没什么用。...print(type(b),b) delattr()被略过了,以后会讲 dict()创建字典,其实可以用来生成很复杂字典,比如用列表构造 a = dict()  # 创建一个空字典 print(type...局部变量可以用locals() print(globals()) getattr(),返回对象属性值,关于对象还没讲到,以后会讲,应该是很重要内容 hasattr(),判断对象是否包含这个属性 setattr...,字典形式变量和值 def test():     local_var = 123     print(locals())  # 打印局部变量,只有一个local_var     print(globals

    42610

    Python学习笔记3.2-python内置函数大全

    集合操作 函数名称 函数功能 备注 basestring() str和unicode 不能直接调用,可以用作isinstance判断 format(value [, format_spec])...映射 函数名称 函数功能 备注 callable(object) 检查对象object是否可调用 1、是可以被调用2、实例是不可以被调用,除非类中声明了call方法 classmethod() 注解...dir([object]) 1、不带参数时,返回当前范围内变量、方法和定义类型列表;2、带参数时,返回参数属性、方法列表。3、如果参数包含方法dir(),方法将被调用。当参数为实例时。...为文件,而exec参数为字符串。...[, mode [, bufsize]]) file类型构造函数,作用为打开一个文件,如果文件不存在且mode为写或追加时,文件将被创建。

    82090

    Python自动化开发学习3-2-匿名函数、内置函数

    lambda没有return,后面的就是返回值   上面的列子我们还是定了一个变量,因为方便后面给参数赋值,这样函数用完后并没有释放空间。把整个函数括起来,后面再写个括号写入参数。  ...]))  # True print(any([0,'',False,None]))  # False   ascii()把一个对象变成一个可打印字符串形式,没什么用。  ...print(type(b),b)   delattr()被略过了,以后会讲   dict()创建字典,其实可以用来生成很复杂字典,比如用列表构造   a = dict()  # 创建一个空字典 print...局部变量可以用locals()   print(globals())   getattr(),返回对象属性值,关于对象还没讲到,以后会讲,应该是很重要内容   hasattr(),判断对象是否包含这个属性...,字典形式变量和值   def test():     local_var = 123     print(locals())  # 打印局部变量,只有一个local_var     print(

    27040

    Java 8之lambda表达式(一)

    由于Java是一个面向对象语言,你不得不构建一个属于某个对象,由它方法包含所需方法。 虽然我们已经通过、对象方式在Java中实现相似的功能,但是这使用起来并不让人轻松和愉快。...1.3 函数式接口 定义:包含一个抽象方法接口,被称之为函数式接口。 注意;你可能奇怪为什么函数式接口必须只有一个抽象方法。难道接口中方法不都是抽象吗?...为了演示函数式接口,我们以Arrays.sort方法为例,方法第二个参数,需要一个Comparator(接口含有一个方法)实例,接下来,我们编写一个简单lambda表达式: Arrays.sort...首先编译器会检查标注注解实体,检查它是否包含一个抽象方法接口。另外,在javadoc页面也会包含一条声明,说明这个接口是一个函数式接口。...好了,lambda表达式基本形式、基本概念,到这里就结束了。 接下来咱们会继续了解lambda表达式以下内容: ① 方法引用 ② 构造器引用 ③ 变量作用域

    34330

    知识点总结:Java核心技术(卷1)

    char类型是用16位表示 有些unicode字符可以用一个char值描述,另一些Unicode字符需要用两个char值描述。...static 方法 建议使用而不是对象名调用静态方法,因为静态方法和对象没有任何关系。...调用构造语句必须是子类构造第一条语句; 如果子类构造器没有显式调用超构造器,将自动地调用默认构造器(没有参数构造器) 如果子类构造器没有显式调用超构造器,超又没有不带参数构造器...instanceof运算符 多态和动态绑定 抽象 抽象不能被实例化 多态: 一个引用类型变量既可以引用当前类型对象,也可以用子类型对象; 动态绑定 理解方法调用 覆盖...局部类有一个优点:它们不仅能够访问包含它们外部类,还可以访问局部变量;在JavaSE8 之前,局部变量声明为final; 匿名内部类 如果定义在方法中内部类创建一个对象,就可以使用匿名内部类替代

    33330

    深入PHP面向对象、模式与实践(一)

    $this伪变量(pseudo-variable)把指向一个对象实例 3.构造方法[constructor method,也称为构造器(constructor)]会被自动调用,可以用来确保必要属性被设置...方法定义清晰易懂,不用担心一些类型错误引起bug 不能用于强制规定参数为某种基本数据类型,如字符串和整型 定义一个也就定义了一个类型,但是一个类型可以用于描述一个家族从多 E.继承 1.子类继承父特性...,有了组件回调,就赋予了其他人在你不知道上下文中扩展你代码权利 2.is_callable()非常智能,能够测试数组,数组形式有效回调应该以对象作为其第一个元素,以方法名作为其第二个元素 3.use...自动加载:__autoload($classname) B.函数和对象函数 1.PHP允许使用字符串动态地引用 2.class_exists()函数检查是否存在 3.get_class()检查对象...()函数检测是否是另一个派生,class_implements()使用一个一个对象引用作为参数,并且返回一个由接口构成数组 7.call_user_func()可以调用方法或函数,要调用一个函数需要将字符串作为它一个参数

    99740

    转:Java 8 重要语言特性:lambda 表达式

    但匿名内部类并不是一个选择,因为: 语法过于冗余; 匿名this和变量容易使人产生误解; 类型载入和实例创建语义不够灵活; 无法捕获非final局部变量; 无法对控制流进行抽象; 对于上述问题...我们把这些拥有一个方法接口称为函数式接口。编译器会根据接口结构自行判断。...注: 判断过程并非简单对接口方法计数; API 作者们可以通过 @FunctionalInterface 注解显式指定一个接口是函数式接口,加上这个注解之后,编译器就会验证接口是否满足函数式接口要求...这些带有目标类型上下文有: 变量声明 赋值 返回语句 数组初始化器 方法和构造方法参数 lambda 表达式函数体 条件表达式(?...,我们需要在和方法名之间加入 “::” 分隔符,例如 Integer::sum。

    57260

    《Java核心技术 卷I:基础知识》读书笔记

    final表示变量只能赋值一次,一旦赋值就不能修改,习惯上常量使用大写。...4.3.3 剖析 一般建议实例域采用private维持封装 4.3.4 构造器 C++中构造函数,没有看到有什么不同 PS:Java中所有对象都是在堆中构造,容易遗漏new操作符 PPS:不要在构造器中定义与实例域重名局部变量...如果结果为false,则会抛出一个AssertionError异常。第二种形式中,表达式将被传入AssertionError构造器,并转换成一个消息字符串。...");,会自动包含时间、调用和方法名。...监视器特性: 是包含私有域 每个监视器对象有一个相关锁 使用锁对所有方法进行加锁。

    57920

    Python内置函数功能汇总

    ,由直接调用执行,只有一个cls参数,执行雷方法时,自动将调用方法赋值给cls.没有此参数指定方法为实例方法 1 class Province: 2 country = "中国...2 在函数体内调用locals(),返回是自由变量。修改自由变量不会影响解析器对变量使用。 3 不能在区域内返回自由变量。...3 应该使用open()代替直接使用file类型构造函数打开文件。...] 53. repr()  将任意值转换为字符串,供计时器读取形式 1 repr(object) 2 返回一个对象字符串表示。...有时可以使用这个函数来访问操作。 3 对于许多类型来说,repr()尝试返回一个字符串,eval()方法可以使用字符串产生对象; 4 否则用尖括号括起来包含名称和其他二外信息字符串被返回。

    76100

    Python内置函数(BIF)查询(附中文详解说明)

    5:想要得到某内置函数具体用法,可以使用 help() 函数,例如查询 input() 函数具体用法:  大家肯定郁闷了,都是英文,当然可以用谷歌翻译,下面就是我为大家奉献中文使用说明:  一、数学运算...()str和unicode 不能直接调用,可以用作isinstance判断format(value [, format_spec])格式化输出字符串 格式化参数顺序从0开始,如“I am {0}...3、如果参数包含方法__dir__(),方法将被调用。当参数为实例时。...为文件,而exec参数为字符串。...[, bufsize]])file类型构造函数,作用为打开一个文件,如果文件不存在且mode为写或追加时,文件将被创建。

    1.2K30

    Java基础知识点总结

    而面向对象像是雇佣了一群人,每个人一件事 Java创建对象几种方式 new —> 调用了构造函数 反射,调用Classnew Instance方法(创建实例) —> 调用了构造函数 反序列化...; 都能包含抽象方法(用于描述系统提供服务,不必提供具体实现) 不同点: 一个只能继承一个直接父,但可以实现多个接口; 抽象构造器,接口没有构造器; 抽象中可以有普通⽅法,接口中有没有要区分...实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用引用。...static方法可以用对象.方法名调用,也可以用.方法名调用。而非静态方法只能创建对象后时调用。 static方法是加载一次,被所有的对象所共享。...引用传递(pass by reference)指的是在实际函数调用时,将实际参数地址传递给函数形式参数,也就是说其实形参和实参保存是堆中同一个对象地址。

    58430

    Java基础面试题

    构造方法能不能重写 构造方法不能重写。 因为构造方法需要和保持同名,而重写要求是子类方法要和父方法保持同 。...如果允许重写构造方法的话,那么子类中将会存在与不同构造方法,这与构造方法要求是 矛盾。...第二种做法是编译时根本无法预知对象和可能属于哪些,程序依靠运行时信息发现对 象和真实信息,这就必须使用反射。...说一说HashSet底层结构 HashSet是基于HashMap实现,默认构造函数是构建一个初始容量为16,负载因子为0.75 HashMap。...然后再创建Callable实现实例。 使用FutureTask包装Callable对象,FutureTask对象封装了Callable对象call()方法返 回值。

    30940

    C++可调用Callable类型总结

    可作为参数标准库 下列标准库设施接受任何可调用(Callable)类型: 库 说明 function(C++11) 包装具有指定函数调用签名任意_可复制构造类型_可调用对象 (模板) bind(...引用包装器 (模板) result_of (C++11)(C++20 中移除) invoke_result(C++17) 推导以一组实参调用一个可调用对象结果类型 (模板) thread (构造函数...但是这并不适用于函数对象, 因为函数对象类型是其类型. 这样, 函数对象有自己类型, 这也意味着函数对象可以用于模板参数, 这对泛型编程有很大提升....这里不提及模板函数, 因为模板函数概念存在于编译期, 运行期函数没有模板概念, 都是经过完全特化过, 因此与普通函数/成员函数概念是一致....捕获形式: 捕获形式 说明 [] 不捕获任何外部变量 [变量, …] 默认以值得形式捕获指定多个外部变量(用逗号分隔), 如果引用捕获, 需要显示声明(使用 & 说明符) [this] 以值形式捕获

    25620
    领券