相关疑难解决方法(0)

python是否具有Java Class.forName()的等价物?

我需要获取一个字符串参数,并在Python中创建该字符串中指定的类的对象.在Java中,我会使用Class.forName().newInstance().Python中有相应的东西吗?


谢谢你的回复.要回答那些想知道我在做什么的人:我想使用命令行参数作为类名,并实例化它.我实际上是在Jython中编程并实例化Java类,因此问题的Java-ness. getattr()效果很好.非常感谢.

python java class instantiation

90
推荐指数
3
解决办法
4万
查看次数

你能用字符串实例化一个类吗?

我正在使用构建器模式来分离一堆不同的配置可能性.基本上,我有一堆名为ID的类(类似于ID12345).这些都继承自基础构建器类.在我的脚本中,每次运行此应用程序时,我都需要为每个类(大约50个)实例化一个实例.所以,我试图看看是否代替做这样的事情:

ProcessDirector = ProcessDirector()
ID12345 = ID12345()
ID01234 = ID01234()

ProcessDirector.construct(ID12345)
ProcessDirector.construct(ID01234)

ID12345.run()
ID01234.run()
Run Code Online (Sandbox Code Playgroud)

我可以做这样的事情(我知道这不起作用):

IDS = ["ID12345", "ID01234"]

ProcessDirector = ProcessDirector()
for id in IDS:
  builder = id() #some how instantiate class from string
  ProcessDirector.construct(builder)
  builder.run()
Run Code Online (Sandbox Code Playgroud)

这样,当我需要在将来添加一个新的时,我所要做的就是将ID添加到IDS列表中,而不是在整个代码中添加新的ID.

编辑

看起来根据数据的来源,有一些不同的意见.这些ID输入到其他人无法访问的文件中.我不是从命令行读取字符串,并且我希望将来在添加新ID时能够进行少量更改.

python reflection design-patterns

37
推荐指数
4
解决办法
7万
查看次数

Python 序列化类并使用 JsonPickle 更改属性大小写

使用 Python 和 JsonPickle,如何使用特定的大小写(例如 Camel Case、Pascal 等)序列化对象?下面的答案是手动完成的,但是寻找特定的 Jsonpickle 解决方案,因为它可以处理复杂的对象类型。

JSON 序列化一个类并使用 Python 更改属性大小写

/sf/answers/602986751/

class HardwareSystem:
    def __init__(self, vm_size):
        self.vm_size = vm_size
        self.some_other_thing = 42
        self.a = 'a'

def snake_to_camel(s):
    a = s.split('_')
    a[0] = a[0].lower()
    if len(a) > 1:
        a[1:] = [u.title() for u in a[1:]]
    return ''.join(a)

def serialise(obj):
    return {snake_to_camel(k): v for k, v in obj.__dict__.items()}

hp = HardwareSystem('Large')
print(json.dumps(serialise(hp), indent=4, default=serialise))
Run Code Online (Sandbox Code Playgroud)

python jsonpickle python-3.x

5
推荐指数
1
解决办法
142
查看次数

将对象类型作为参数传递

我有一些代码希望以比我的直觉想要的更优雅的方式实现。我将尽力描述我正在尝试的事情。

\n\n
class Fruit():\n    pass\n\nclass Apple(Fruit):\n    pass\n\nclass Orange(Fruit):\n    pass\n\ndef create_fruit(fruit_type):\n    test = ???? # code here to create instance of fruit of desired type called test\n
Run Code Online (Sandbox Code Playgroud)\n\n

好的,希望这段代码能有意义。我在模块中有一个函数,它需要一堆参数来创建类的实例。理想情况下,我希望传递一个参数来说明要创建的类的类型(但它们都是同一超类的实例或子类)。每个子类的参数将是相同的(截至目前)。

\n\n

我可能可以很容易地用 if 语句做一些事情并组合在一起(例如,,,,if fruit_type==1i test=Apple(),,f fruit_type == 2test=Orange()\xe2\x80\xa6),但是在尝试提高作为一名Python程序员时,我想知道是否有更好的这样做的方法。我已经简要阅读了装饰器和函数式编程(尽管它对我来说仍然相当抽象,并且需要更多时间来理解),所以也许这也是同样的脉络?

\n

python python-3.x python-3.8

3
推荐指数
1
解决办法
5357
查看次数