我需要获取一个字符串参数,并在Python中创建该字符串中指定的类的对象.在Java中,我会使用Class.forName().newInstance().Python中有相应的东西吗?
谢谢你的回复.要回答那些想知道我在做什么的人:我想使用命令行参数作为类名,并实例化它.我实际上是在Jython中编程并实例化Java类,因此问题的Java-ness. getattr()效果很好.非常感谢.
如果我使用eval()评估Python字符串,并且有一个类如下:
class Foo(object):
a = 3
def bar(self, x): return x + a
Run Code Online (Sandbox Code Playgroud)
如果我不信任字符串会有什么安全风险?特别是:
eval(string, {"f": Foo()}, {})不安全的?也就是说,你可以从Foo实例到达os或sys或者不安全的东西吗?eval(string, {}, {})不安全的?也就是说,我可以完全从内置像len和list到达os或sys吗?有一些不安全的字符串,如"[0]*100000000",我不在乎,因为在最坏的情况下,他们会减慢/停止程序.我主要关心的是保护程序外部的用户数据.
显然,eval(string)在大多数情况下,没有自定义词典是不安全的.
所以我有一组类和一个带有类名的字符串.如何基于该字符串实例化一个类?
class foo:
def __init__(self, left, right):
self.left = left
self.right = right
str = "foo"
x = Init(str, A, B)
Run Code Online (Sandbox Code Playgroud)
我希望x是类foo的实例化.
是否可以检查某个类是否存在?我在 json 配置文件中有类名。我知道我可以简单地尝试通过类名字符串创建一个对象,但这实际上是一个坏主意,因为类构造函数可以做一些意想不到的事情,而此时我只想检查我的配置是否有效并全部提到课程可用。
有什么办法吗?
编辑:我也明白你可以从某个模块中获取所有方法,在我的情况下,我不确定并且实际上并不关心来自哪个模块的方法。它可以来自任何导入语句,我可能不知道确切来自哪里。
我想知道是否存在使用django rest框架从其URL检索对象的干净方法。当然应该有,因为使用时似乎正在发生HyperlinkedRelatedField。
例如,我将此URL /api/comment/26作为字符串。从我的角度来看,我该如何使用评论实例pk=26?
当然,我可以重做工作并在字符串上工作,但这一定是更好的方法吗?
非常感谢。
这是我最后解决的方法:
resolve('/api/comment/26/').func.cls.model将返回我的模型评论。
resolve('/api/category/1/').kwargs['pk']将返回pk。
这给你:
from django.core.urlresolvers import resolve
resolved_func, unused_args, resolved_kwargs = resolve('/api/category/1/')
resolved_func.cls.model.objects.get(pk=resolved_kwargs['pk'])
Run Code Online (Sandbox Code Playgroud) 假设我有一个类Foo,我想定义一个将类构造函数作为参数接收的函数:
def bar(class_name):
local_class = None
# TODO: if I call bar(Foo()), I want to get local_class = Foo()
Run Code Online (Sandbox Code Playgroud)
如何实现该功能?
这是我在数据管道项目中面临的一个问题。我有 2 个数据源。一个包含所有用户数据,另一个包含我们必须从用户数据处理到输出的所有列的元数据。
所以python很适合动态类型转换,就像我说的
a = float
b = "25.123"
c = a(b)
print(c)
>> 25.123
Run Code Online (Sandbox Code Playgroud)
这就是我想要做的,我想动态键入强制转换值以便正确处理它们。该类型是从元数据数据源中检索的。问题是当我对元数据进行 django 模型查询时,我得到了 unicode 对象。
a = model.objects.filter(id = 'id') # get the type variable from the meta-data
a = a[0]['type']
print(a)
>> u'float'
a("123.123")
>> TypeError: 'unicode' object is not callable
Run Code Online (Sandbox Code Playgroud)
我如何将这个 u'float' 转换为 float ?这种方法有更好的选择吗?我检查了这个,但它不起作用
对所有建议开放
python type-conversion django-models dynamictype python-unicode
python ×6
class ×3
constructor ×1
dynamic ×1
dynamictype ×1
eval ×1
function ×1
java ×1
security ×1