download.csdn.net/download/si…
poe.com/
react+vite前端架构 功能(build)
优化 devops??(docker git k8s jenkins nginx)
微前端 bff??
fastapi flask 百炼流式输出(日志 重复问题等)
postgresql 账号密码登录
阿里云短信登录 SSO登录??
Apollo配置中心
登录权限
密码加密
表单提交
sql注入
手机号验证码登录(防刷,存内存)
apollo 阿里云
堡垒机
nginx
表单邮箱
联调python
sql
oss
手机 pc适配判断
navigator.userAgent h5(混合开发?)
sqlalchemy
中英文切换
from omegaconf import OmegaConf
- 功能:导入
OmegaConf模块,这是一个用于处理配置文件(例如 YAML)的库,提供了灵活的配置管理功能。
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
-
__file__:- 这个特殊变量包含当前脚本的路径。它用于确定脚本的目录。
-
os.path.dirname(__file__):os.path.dirname函数返回当前脚本所在目录的路径。
-
os.path.join(os.path.dirname(__file__), '..'):os.path.join函数将当前脚本的目录与'..'(表示上级目录)连接起来,形成上级目录的路径。
-
os.path.abspath(...):os.path.abspath函数将相对路径转换为绝对路径,从而确保后续操作不会受到当前工作目录的影响。
-
sys.path.append(...):
-
sys.path是一个列表,包含 Python 解释器查找模块的路径。使用append方法将上级目录的绝对路径添加到这个列表中,使得 Python 可以在该目录中查找模块。class LoadScene: _instance = None # 类变量 _instance 被初始化为 None,用于存储 LoadScene 类的单例实例。 def new(cls, *args, **kwargs): if cls._instance is None: cls._instance = super(LoadScene, cls).new(cls) # 这一行代码是实现单例模式的关键部分 return cls._instance
def __new__(cls, *args, **kwargs):
__new__ 方法详解
1. 定义与作用
__new__是一个特殊的方法,用于创建类的实例。它在实例化对象时被调用,负责分配内存并返回一个新的对象。- 语法为
def __new__(cls, *args, **kwargs):,其中cls是当前类的引用,而*args和**kwargs分别用于接收位置参数和关键字参数。
2. 实例化过程
-
在 Python 中,实例化一个对象的过程分为两个主要步骤:
- 调用
__new__方法:分配内存并创建一个新的对象。 - 调用
__init__方法:初始化这个新对象的属性。
- 调用
-
__new__方法必须返回一个实例(通常是cls),而__init__方法则不需要返回值。
3. 与 __init__ 的区别
__new__:- 负责创建对象并返回实例。
- 在类的实例化过程中第一个被调用。
- 可以用于创建类的子类实例或实现单例模式。
__init__:- 负责初始化对象的属性,设置实例的初始状态。
- 在
__new__返回实例后被调用。 - 通常不返回任何值(返回
None)。
4. 使用场景
-
单例模式:确保某个类只有一个实例。例如,在配置管理、数据库连接等场景中,单例模式可以避免创建多个相同的对象。
-
元类:在创建类的实例时,可能需要控制类的创建逻辑,比如在元类中使用
__new__。 -
定制实例创建:可以在
__new__中添加逻辑,比如根据某些条件返回不同的实例。
示例
以下是一个更完整的示例,展示了 __new__ 方法的用法:
class Singleton:
_instance = None
def __new__(cls, *args, **kwargs):
if cls._instance is None:
cls._instance = super(Singleton, cls).__new__(cls)
return cls._instance
def __init__(self, value):
# 只初始化一次
if not hasattr(self, 'initialized'):
self.value = value
self.initialized = True
# 测试
s1 = Singleton(1)
s2 = Singleton(2)
print(s1.value) # 输出: 1
print(s2.value) # 输出: 1
print(s1 is s2) # 输出: True,s1 和 s2 是同一个实例
cls._instance = super(LoadScene, cls).new(cls)
1. super(LoadScene, cls)
- 功能:获取
LoadScene的父类的代理对象。 - 作用:
super()函数用于在类的继承层次中向上查找。它可以调用父类的方法。 LoadScene:这是当前类的名称,表示你希望从哪个类获取父类的方法。cls:通常在类方法(如__new__或__init__)中,cls是对当前类的引用,允许你使用该类的上下文。
2. __new__(cls)
- 功能:调用父类的
__new__方法。 - 作用:
__new__是一个特殊的方法,用于创建类的实例。它返回一个新的实例,通常是通过调用父类的__new__方法来实现。
3. cls._instance = ...
-
功能:将创建的新实例赋值给类变量
_instance。 -
目的:确保
_instance始终持有LoadScene类的唯一实例,从而实现单例模式。@classmethod def get_instance(cls): if cls._instance is None: cls._instance = LoadScene() return cls._instance
1. @classmethod 装饰器
- 功能:将
get_instance方法定义为类方法。 - 作用:类方法的第一个参数是类本身(通常用
cls表示),而不是实例对象。这使得可以通过类来调用该方法,而不必首先创建实例。
2. if cls._instance is None:
- 功能:检查类变量
_instance是否为None。 - 目的:判断是否需要创建一个新的
LoadScene实例。
3. cls._instance = LoadScene()
- 功能:如果
_instance为None,则创建一个新的LoadScene实例,并将其赋值给_instance。 - 作用:确保
LoadScene只有一个实例,从而实现单例模式。
4. return cls._instance
-
功能:返回当前类的单例实例。
-
用途:无论多少次调用
get_instance方法,返回的都是同一个实例。
for equipment in scene.get('Equipment', []):
这一行代码的作用是遍历 scene 对象中的 Equipment 列表。以下是这行代码的详细解析:
代码解析
-
scene.get('Equipment', []):-
scene是一个字典,get方法用于安全地访问字典中的Equipment键。 -
如果
Equipment键存在,它将返回对应的值(通常是一个列表)。 -
如果
Equipment键不存在,get方法将返回默认值[](一个空列表)。 -
这样做可以避免在尝试访问一个不存在的键时抛出
KeyError异常。
"scripts": { 用于运行测试。在这里,它只会输出一个错误信息,表示没有指定测试,然后退出,返回状态码 1,表示失败。 "test": "echo "Error: no test specified" && exit 1",
-r: 这是 Node.js 的一个选项,表示在执行脚本之前预加载一个模块。dotenv/config: 这是 dotenv 模块的一个子模块,用于自动加载 .env 文件中的环境变量。这意味着在执行后面的脚本(如 devServer/index.js)时,环境变量已经被加载并可用。 "devserver": "node -r dotenv/config devServer/index.js" },
module.exports = { name: "test", // 本项目构建后资源服务端口,多个项目同时启动时请配置为不同端口 port: 9601, /* * 按需发版配置 * * 默认打开,发版时一定要填写要发布的模块,开发时会构建所有模块 * 防止发示例代码到开发和测试环境上 * e.g. * "pages/home" * "modules/todoList" / releaseEntries: [], /* * webpack 构建钩子 * @param {import('@hi/cli').WebpackChain} webpackConfig */ buildConfig(webpackConfig) { // 用于修改webpack构建配置 // 处理 .less 文件的规则 const lessRule = webpackConfig.module.rule("less").test(/.less/) //为图像文件(如 PNG、JPEG、GIF 等)设置了 Webpack 规则 .use("file-loader") .loader("file-loader") .options({ limit: 100000, name:
assets/imgs/[name].[ext], esModule: false, }); // 设置路径别名 webpackConfig.resolve.alias.set("@", path.join(__dirname, "./")); },};sudo: required // 表示需要使用 sudo 权限来运行构建。这通常用于需要特定系统权限的服务。 dist: trusty // 指定使用 Ubuntu Trusty (14.04) 作为构建环境的基础镜像
language: node_js // 指定使用 Node.js 作为编程语言
services:
- docker // 指定构建时需要的服务。在这里,启用了 Docker 服务。
node_js:
- "12"
cache: yarn // 启用对 yarn 缓存的支持,以加快后续构建的速度。
env: // 定义全局环境变量 global:
- NODE_ENV="production" // 设置为 "production",用于指示运行环境。
- PROJECT="projectName" // 设置项目名称,确保与 project.js 中的 name 一致
- PACKAGE_VERSION="v1.1.${TRAVIS_BUILD_NUMBER}" // 设置包版本,包含 Travis 构建号,以确保版本唯一性
before_install: // 在安装依赖之前执行的命令。 //npm config set: 设置 npm 使用的私有注册表 URL。npm config list: 列出当前的 npm 配置,以确保正确设置
- npm config set @hi:registry iservice.schneider-electric.cn/nexus/repos…
- npm config list after_install: //在依赖安装之后执行的命令。
- npm list // 列出已安装的 npm 包,以确认依赖是否正确安装。
before_deploy: // 在部署之前执行的命令
- export ARTIFACT_NAME="{TRAVIS_BRANCH}-${PACKAGE_VERSION}.zip"
- yarn build
- cd ./dist
- cat release.json //打印 release.json 的内容,通常用于确认构建信息
- zip -r ../${ARTIFACT_NAME} * // 用于递归地将当前目录中的所有文件和子目录打包成一个 ZIP 文件
- cd ../
- 'curl -o upload.sh -H "Authorization: token {GITHUB_UPLOAD_SCRIPT}'
- chmod a+x ./upload.sh
deploy:
- provider: script
skip_cleanup: true
on:
all_branches: true
script:
- ./upload.sh ./{PROJECT} {PACKAGE_VERSION} {OSS_KEY} ${OSS_SECRET}
-