我正在开发一个 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) 我习惯使用 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)
如果我这样转换上面的步骤,我没有问题: …
我正在尝试在 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 …