相关疑难解决方法(0)

是否有一种简单,优雅的方式来定义单身人士?

似乎有很多方法可以在Python中定义单例.Stack Overflow是否有共识?

python singleton design-patterns

427
推荐指数
13
解决办法
27万
查看次数

什么是memoization以及如何在Python中使用它?

我刚开始使用Python,我不知道什么是memoization以及如何使用它.另外,我可以有一个简化的例子吗?

python memoization

356
推荐指数
9
解决办法
14万
查看次数

如何在运行时动态更改实例的基类?

本文有一个片段__bases__,通过向类继承的类的现有类集合添加一个类来动态更改某些Python代码的继承层次结构.好的,这很难读,代码可能更清晰:

class Friendly:
    def hello(self):
        print 'Hello'

class Person: pass

p = Person()
Person.__bases__ = (Friendly,)
p.hello()  # prints "Hello"
Run Code Online (Sandbox Code Playgroud)

也就是说,Person不从Friendly源级别继承,而是通过修改__bases__Person类的属性在运行时动态添加此继承关系.但是,如果您更改FriendlyPerson成为新的样式类(通过继承自object),则会收到以下错误:

TypeError: __bases__ assignment: 'Friendly' deallocator differs from 'object'
Run Code Online (Sandbox Code Playgroud)

关于这一点的谷歌搜索似乎表明,在运行时更改继承层次结构时,新样式类和旧样式类之间存在一些不兼容性.具体来说:"新式类对象不支持赋予其基础属性".

我的问题是,是否有可能通过使用__mro__属性使上述Friendly/Person示例在Python 2.7+中使用新式类工作?

免责声明:我完全意识到这是一个模糊的代码.我完全意识到,在实际的生产代码中,这样的技巧往往难以理解,这纯粹是一个思想实验,并且可以让人们了解Python如何处理与多重继承相关的问题.

python inheritance dynamic

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

将字符串列表作为 Airflow 中依赖任务的参数传递

我正在尝试通过XCom将字符串列表从一个任务传递到另一个任务,但我似乎无法将推送的列表解释为列表。

例如,当我在某个blah在 a 中运行的函数中执行此操作时ShortCircuitOperator

paths = ['gs://{}/{}'.format(bucket, obj) for obj in my_list]
kwargs['ti'].xcom_push(key='return_value', value=full_paths)
Run Code Online (Sandbox Code Playgroud)

然后我想使用这样的列表作为运算符的参数。例如,

run_task_after_blah = AfterBlahOperator(
    task_id='run-task-after-blah',
    ...,
    input_paths="{{ ti.xcom_pull(task_ids='find-paths') }}",
    ...,
)
Run Code Online (Sandbox Code Playgroud)

我希望input_paths等于paths但不是因为渲染首先发生然后分配,并且模板渲染在某种程度上将xcom_pull返回转换为字符串化列表(此后我的AfterBlahOperator插入将其分配为 JSON 中元素的值。

我尝试将其连接paths成一个由某个分隔符分隔的字符串,然后将其推送到 XCom,然后在从 XCom 中拉出时将其拆分回来,但是由于 XCom 首先呈现,我得到了在模板中调用函数时的字符串化列表split或者paths如果split函数应用于参数的原始连接字符串(如"{{ ti.xcom_pull(task_ids='find-paths') }}".split(';').

当提取的值可以进一步处理时,XCom 似乎非常适合作为任务参数的单个值或多个值,但不能将 multiple_values 转换为“一个”作为任务的参数。

有没有办法做到这一点而不必编写一个额外的函数来精确返回这样的字符串列表?或者也许我滥用 XCom 太多了,但是 Airflow 中有许多操作符将元素列表作为参数(例如,通常是多个文件的完整路径,这些文件是先前任务的结果,因此事先不知道)。

python airflow

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

使用新方法动态包装任意类

我有一个A类。

我有另一个 B 类。 B 类的实例的功能应该与 A 类完全一样,除了一个警告:我想要另一个可用的函数 special_method(self, args, kwargs)

所以以下应该工作:

instance_A = classA(args, kwargs)
instance_B = classB(instance_A)
method_result = instance_B.special_method(args, kwargs)
Run Code Online (Sandbox Code Playgroud)

我如何编写 B 类来实现这一点?

注意:如果我只想为一个 A 类执行此操作,我可以让 B 类继承 A 类。但我希望能够添加special_method到类 C、D、E、F...等。

python

4
推荐指数
1
解决办法
65
查看次数