我想使用该方法填充数据类的属性default_factory。但是,由于工厂方法仅在该特定类的上下文中有意义,因此我想将其保留在类内部(例如作为静态或类方法)。例如:
from dataclasses import dataclass, field
from typing import List
@dataclass
class Deck:
cards: List[str] = field(default_factory=self.create_cards)
@staticmethod
def create_cards():
return ['King', 'Queen']
Run Code Online (Sandbox Code Playgroud)
但是,我在第 6 行收到此错误(如预期):
NameError:名称“self”未定义
我怎样才能克服这个问题?我不想将该create_cards()方法移出类。
我必须在while循环中显示Scanner输入:用户必须插入输入,直到他写"退出".所以,我必须验证每个输入以检查他是否写"退出".我怎样才能做到这一点?
while (!scanner.nextLine().equals("quit")) {
System.out.println("Insert question code:");
String question = scanner.nextLine();
System.out.println("Insert answer code:");
String answer = scanner.nextLine();
service.storeResults(question, answer); // This stores given inputs on db
}
Run Code Online (Sandbox Code Playgroud)
这不起作用.如何验证每个用户输入?
我想使用Splinter登录https网页.但是,登录时似乎没有设置cookie.这是我的代码:
from splinter import Browser
import time
username = 'blabla'
password = 'blabla'
with Browser('chrome') as browser:
browser.visit("https://the.login.page")
browser.fill('p_username', username)
browser.fill('p_password', password)
browser.find_by_css('.button').first.click()
time.sleep(2)
browser.visit('https://other.page.after.login')
Run Code Online (Sandbox Code Playgroud)
我到了另一页,但我没有登录.
browser.cookies.all()不为空,它正确包含我的SESSIONID值.但...document.cookie (在浏览器控制台中)为空.难道我做错了什么?
我也试过用selenium,得到了同样的结果:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
username = 'blabla'
password = 'blabla'
browser = webdriver.Chrome()
browser.get('https://the.login.page')
time.sleep(2)
username_field = browser.find_element_by_name("p_username")
password_field = browser.find_element_by_name("p_password")
username_field.send_keys(username)
password_field.send_keys(password)
login_attempt = browser.find_element_by_xpath("//*[@type='submit']")
login_attempt.submit()
time.sleep(2)
browser.get('https://other.page.after.login')
Run Code Online (Sandbox Code Playgroud) 在迁移中使用模型时,在 Django 中我们可以使用apps.get_model()来确保迁移将使用模型的正确“历史”版本(就像定义迁移时一样)。但是我们如何处理从代码库导入的“常规”变量(而不是模型)?
如果我们从另一个模块导入变量,我们将来可能会遇到问题。例如:
所以问题是:编写迁移的最佳实践是什么?我们是否应该始终对值进行硬编码而不导入外部变量?
假设我想简单地使用我在代码库中某处定义的变量来修改字段的值。例如,我想将所有普通用户变成管理员。我将用户角色存储在枚举 ( UserRoles) 中。编写迁移的一种方法是:
from django.db import migrations
from user_roles import UserRoles
def change_user_role(apps, schema_editor):
User = apps.get_model('users', 'User')
users = User.objects.filter(role=UserRoles.NORMAL_USER.value)
for user in users:
user.role = UserRoles.ADMIN.value
User.objects.bulk_update(users, ["role"])
def revert_user_role_changes(apps, schema_editor):
User = apps.get_model('users', 'User')
users = User.objects.filter(role=UserRoles.ADMIN.value)
for user in users:
user.role = UserRoles.NORMAL_USER.value
User.objects.bulk_update(users, ["role"])
class Migration(migrations.Migration):
dependencies = [
('users', '0015_auto_20220612_0824'),
]
operations = [
migrations.RunPython(change_user_role, revert_user_role_changes)
]
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,这将会出现我上面提到的问题。我使用了枚举示例,但这可以应用于迁移中引用的每个变量。
那么问题又来了:迁移的最佳实践是什么?我们是否应该始终对值进行硬编码而不引用可能更改的外部变量?
我有一个ResponseGrid对象,我想用Json对其进行编码。这个对象内部有一个$row变量,它将包含一个Document对象数组。
我在和中都实现了JsonSerializable接口和jsonSerialize()方法。ResponseGridDocument
我有的是这样的:
ResponseGrid.php:
require_once ROOT_DIR . "/business/models/Document.php";
class ResponseGrid implements JsonSerializable {
private $sEcho;
private $iTotalRecords;
private $iTotalDisplayRecords;
private $rows; // This will contain an Array of Documents
public function jsonSerialize() {
return [
'sEcho' => $this->sEcho,
'iTotalRecords' => $this->iTotalRecords,
'iTotalDisplayRecords' => $this->iTotalDisplayRecords,
'rows' => json_encode($this->rows), //This will cause troubles
];
}
}
Run Code Online (Sandbox Code Playgroud)
文件.php:
class Document implements JsonSerializable {
private $id;
private $name;
private $description; …Run Code Online (Sandbox Code Playgroud) 我试图在Python中重现我在一本书中找到的两个例子(最初是用Java编写的).
这两个函数检查字符串是否包含重复的字符.第一个函数使用integer(checker)作为位向量,而第二个函数只使用一个布尔列表.我期望使用带有位的功能有更好的性能,但实际上它表现更差.
这是为什么?从Java翻译到Python时,我写错了吗?
注意:为简单起见,我们只使用小写字母(a到z),尤其是位向量函数.
import sys
import timeit
def is_unique_chars_bit(my_str):
checker = 0
for char in my_str:
val = ord(char) - ord('a')
if ((checker & (1 << val)) > 0):
return False
checker |= (1 << val)
return True
def is_unique_chars_list(my_str):
if len(my_str) > 128:
# Supposing we use ASCII, which only has 128 chars
return False
char_list = [False] * 128
for char in my_str:
val = ord(char)
if char_list[val]:
return False …Run Code Online (Sandbox Code Playgroud) 我有4个模块:
entry_point.pyutils.pyrunner.pyclient.py我使用argparsein,utils.py并且希望能够检索中的其中一个参数的值client.py。
入口点模块(从控制台调用的模块):
import utils
def main():
console_args = utils.parse_arguments() # Get command-line arguments
runner.run(console_args) # The main function in the program
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)utils.py 模块:
def parse_arguments():
parser = argparse.ArgumentParser()
parser.add_argument(
# Several arguments, one of which should be 'url'
)
return parser.parse_args()
Run Code Online (Sandbox Code Playgroud)runner.py 模块:
import client
def run(arguments):
user = User.new(arguments.user_id)
client.get_user_info(user)
Run Code Online (Sandbox Code Playgroud)client.py 模块:
def get_user_info(user):
url = _compose_url('user_status')
resp = requests.post(url, data=user.id)
def _compose_url(method): …Run Code Online (Sandbox Code Playgroud)我正在使用带有 JPA 的 Spring 3。
我有这样的产品类:
@Entity
@Table(name="products")
public class Product {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private long id;
@Column(name="price", precision=12, scale=2)
private BigDecimal price;
Run Code Online (Sandbox Code Playgroud)
问题是,当我用“1.20”这样的价格填写我的产品创建表单时,我的视图中会出现“1.2”。尾随零消失。
我怎么解决这个问题?
我有两个类具有相同名称的方法,但此方法使用不同的参数.所以我考虑使用**kwargs(见下面的例子).但是这两种方法中的一种不需要任何参数,所以我得到这个错误:
TypeError:print_smt()占用1个位置参数,但给出了2个
因为我想将空字典传递给函数.
我怎么解决这个问题?我是否被迫使用if语句来调用带有和不带参数的函数,或者有更好的方法来解决问题?
class Bar(object):
def print_smt(self, text):
print(text)
class Foo(object):
def print_smt(self):
print("Nothing")
def test(obj, **p2):
obj.print_smt(p2)
bar = Bar()
test(bar, text='print this')
foo = Foo()
test(foo) # This one breaks!
Run Code Online (Sandbox Code Playgroud) 这个很难解释,但基本上我的控制器是构建的,并期望一个数组
params[:order_items],所以我尝试过这样:
<%= hidden_field_tag "order_items", @order[:order_items_ids] %>
Run Code Online (Sandbox Code Playgroud)
但我得到了连接的ID
<input id="gig_items" name="gig_items" type="hidden" value="2300124946">
Run Code Online (Sandbox Code Playgroud)
那么,我如何params使用html(没有js)在其中一个键中发送和数组?
我需要在我的数据库中存储价格.我正在使用JPA,所以我有一个这样的模型:
@Entity
@Table(name="products")
public class Product {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private long id;
@Column(name="price")
private float price;
}
Run Code Online (Sandbox Code Playgroud)
问题是,当我用"4.20"这样的值填充价格形式输入时,在我的Oracle数据库中,我得到"4.2",失去尾随零.
我怎么解决这个问题?
编辑:因为我正在使用JPA,所以我必须避免在本机Oracle方言中编写查询.为了存储产品(以及它们的价格),我只需要编写类似的东西em.persist(product),其中em是EntityManager
python ×5
java ×2
spring ×2
argparse ×1
arraylist ×1
arrays ×1
bigdecimal ×1
cookies ×1
django ×1
jakarta-ee ×1
java-ee ×1
jpa ×1
json ×1
kwargs ×1
loops ×1
oracle ×1
performance ×1
php ×1
post ×1
ruby ×1
scale ×1
selenium ×1
splinter ×1
spring-mvc ×1
while-loop ×1