小编J1b*_*1bz的帖子

mixin 应该使用父属性吗?

我正在开发一个 python 项目,我需要使用大约 20 个不同的类来实现一系列功能,例如:“下载”、“解析”、“更新”等。

使用超类可以轻松分解多个功能,因为所有功能所需的代码都相同。

但有时,特别是对于“解析”方法,我有 10 个类必须实现相同的算法,而另外 10 个类需要特定算法。

根据我对 python 的了解,这种行为可以通过使用 mixin 轻松分解。

但是即使“解析”算法相同,这里也存在问题,我需要将标签应用于解析的条目,并且该标签特定于每个类。我想知道这是否是使用仅由 mixin 使用的类属性来实现此目标的正确方法。

这段代码给出了如何使用属性的示例:

class MyMixin():
    def parse(self):
        print(self.tag)
        ...

class MyClass(MyMixin):
    tag = 'mytag'
Run Code Online (Sandbox Code Playgroud)

我已经在一些框架(http://www.django-rest-framework.org/api-guide/generic-views/)中看到了它,但我很想知道社区的意见。

==========================

编辑

用一个具体的例子来总结一下,我应该这样写:

class MyMixin():
    def do_something(self):
        print(self.tag)

class MyClass(MyMixin):
    tag = 'mytag'

if __name__ == '__main__':
    c = MyClass()
    c.do_something()
Run Code Online (Sandbox Code Playgroud)

或者那个 :

class MyMixin():
    def do_something(self, tag):
        print(tag)

class MyClass(MyMixin):
    tag = 'mytag'

if __name__ == '__main__':
    c = MyClass()
    c.do_something(c.tag)
Run Code Online (Sandbox Code Playgroud)

python design-patterns mixins

7
推荐指数
2
解决办法
3236
查看次数

如何在 github 操作中激活 virtualenv?

我习惯使用 virtualenvs。但是由于某种原因,我无法在 github 操作作业中激活环境。

为了调试我添加了这一步:

      - name: Activate virtualenv
        run: |
          echo $PATH
          . .venv/bin/activate
          ls /home/runner/work/<APP>/<APP>/.venv/bin
          echo $PATH
Run Code Online (Sandbox Code Playgroud)

在操作日志上我可以看到

/opt/hostedtoolcache/Python/3.9.13/x64/bin:/opt/hostedtoolcache/Python/3.9.13/x64:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
[...]  # Cut here because a lot of lines are displayed. My executables are present including the one I'm trying to execute : pre-commit.
/home/runner/work/<APP>/<APP>/.venv/bin:/opt/hostedtoolcache/Python/3.9.13/x64/bin:/opt/hostedtoolcache/Python/3.9.13/x64:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Run Code Online (Sandbox Code Playgroud)

所以它应该有效...

但接下来的步骤是

      - name: Linters
        run: pre-commit
Run Code Online (Sandbox Code Playgroud)

生成这些错误日志

Run pre-commit
  pre-commit
  shell: /usr/bin/bash -e {0}
  env:
    [...]  # private
/home/runner/work/_temp/8e893c8d-5032-4dbb-8a15-59be68cb0f5d.sh: line 1: pre-commit: command not found
Error: Process completed with exit code 127.
Run Code Online (Sandbox Code Playgroud)

如果我这样转换上面的步骤,我没有问题: …

bash virtualenv github-actions

6
推荐指数
1
解决办法
3906
查看次数

.css .js 文件上的 php-fpm apache2 403 错误

我正在尝试在 debian jessie 上设置一个具有多个虚拟主机的 apache2 服务器。我希望他们每个人都有一个不同的 FastCgiExternalServer。我在 jessie 上使用 php5-fpm 包中的 php 版本以及默认的 /etc/php5/fpm 配置文件。

基本的 apache 配置工作正常:

<VirtualHost *:80>
        ServerName lalala.org
        DocumentRoot "/path/to/app/www"
        <Directory "/path/to/app/www">
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
                Require all granted
        </Directory>
        FastCgiExternalServer /path/to/app/www -socket /var/run/php5-fpm.sock
        AddHandler php-fcgi .php
        Action php-fcgi /path/to/app/www
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

但是,我在 .css、.js 文件上遇到 403 错误。我读了这篇文章:http://whocares.de/fastcgiexternalserver-demystified/8/,但即使使用此配置:

        FastCgiExternalServer /path/to/app/www -socket /var/run/php5-fpm.sock
        AddHandler php-fcgi .php
        Action php-fcgi /virtualpath
        Alias /virtualpath /path/to/app/fcgi-uri
Run Code Online (Sandbox Code Playgroud)

(/path/to/app/fcgi-uri 是 /path/to/app/www 的符号链接)

这不起作用。就好像我遇到了本地问题,但不知道是什么。

谢谢

编辑:我找到了一个使 fastcgi …

php apache http-status-code-403

5
推荐指数
0
解决办法
1428
查看次数