- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我没有找到简短的构造函数调用的引用,该调用将初始化调用者选择的变量。我在寻找
class AClass:
def __init__(self):
pass
instance = AClass(var1=3, var2=5)
class AClass:
def __init__(self, var1, var2):
self.var1 = var1
self.var2 = var2
instance = AClass()
instance.var1 = 3
instance.var2 = 5
最佳答案
这是一个很好的问题,对我来说也是一个难题。
在现代的Python世界中,根据您的需要,有和三个(优秀的)速记初始值设置项(这个术语很聪明,我正在采用)。 无需任何操作,就可以使用__init__
方法(这是您首先要避免的方法)。
命名空间对象
如果您希望为实例分配任意值(即不是由类强制执行),则应使用称为命名空间的特定数据结构。命名空间对象是可以使用点表示法访问的对象,基本上可以将所需的对象分配给该对象。
您可以从argparse导入Namespace类(在此介绍:How do I create a Python namespace (argparse.parse_args value)?)。从Python 3.3开始。标准类型包中提供了SimpleNamespace类。
from types import SimpleNamespace
instance = SimpleNamespace(var1=var1, var2=var2)
您还可以编写:
instance = SimpleNamespace()
instance.var1 = var1
instance.var2 = var2
假设它是“快速而肮脏的方式”,在许多情况下都可以使用。通常,甚至不需要声明您的类。
class AClass(Namespace):
def mymethod(self, ...):
pass
然后:
instance = AClass(var1=var1, var2=var2, etc.)
这为您提供最大的灵活性。
from collections import namedtuple
AClass = namedtuple("AClass", "var1 var2")
请注意定义是多么的酷和简短,而不需要__init__
方法。您实际上可以在那之后完成类(class)。instance = AClass(var1, var2)
或者instance = AClass(var1=var1, var2=var2)
命名列表from namedlist import namedlist
AClass = namedlist("AClass", "var1 var2")
并创建一个对象:instance = AClass(var1, var2)
或者:instance = AClass(var1=var1, var2=var2)
然后您可以修改它们:instance.var1 = var3
但是您不能添加未定义的属性。>>> instance.var4 = var4
File "<stdin>", line 1, in <module>
AttributeError: 'instance' object has no attribute 'var4'
用法k,v, z = my_func()
)。加上它是一成不变的,它有自己的优势。k, v, z = instance
)。如果您需要来自具有强制属性的适当类的可变对象,则可能是首选的解决方案。from dataclasses import dataclass
@dataclass
class InventoryItem:
"""Class for keeping track of an item in inventory."""
name: str
unit_price: float
quantity_on_hand: int = 0
def total_cost(self) -> float:
return self.unit_price * self.quantity_on_hand
(来自官方文档)@dataclass
装饰器将执行的操作是自动添加__init__()
方法:def __init__(self, name: str, unit_price: float, quantity_on_hand: int=0):
self.name = name
self.unit_price = unit_price
self.quantity_on_hand = quantity_on_hand
恕我直言,这是一个非常漂亮的Python解决方案。关于python - Python中有一个简写的初始化程序吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48285048/
考虑以下示例: if (cache) { x = cache; } else { x = cache = someMethod(); } 无论如何要使它比 cache 更短? x =
我有一个字符串,我想将它附加到其他字符串。比方说: $my_string = 'Hello'; $my_string .= ' there'; 这将返回“你好”。 我想像这样设置条件: $my_str
有没有办法执行以下操作,但简而言之 if/then 语法: if($method->isAbstract()) { $details['abstract'] = true; } 如果我这样做:
我很好奇,有没有更简单的说法 if(myVar == myVal || myVar == myOtherVal){ /*...*/ } 如: if(myVar == myVal || myOtherV
我正在寻找一种方法来最小化数组的创建,其中所有索引都具有相同的值。这可能不可能,但我会发现它非常方便。 考虑: var layer = []; layer['game'] = new Kinetic.
我想知道是否有办法将简写 if/else 与简写 += 合并 类似这样的事情: var value; $.each(data.events, function(index, element) {
我需要用 JQuery 做一个速记 IF-ELSE。我的代码: $('#somediv').val() != 0 ? $('#somediv').toggleClass('class1') :
我觉得这一定是重复的,但我找不到任何东西,可能是由于措辞不同,或者只是因为确实没有更好的东西。 我正在生成大量的 JS 代码,其中“OR”对象属性与变量,而标识符不一定匹配。看起来像这样(值为 boo
这个问题在这里已经有了答案: Shorthand if/else statement Javascript (7 个答案) 关闭 9 年前。 下面的简写等价物是什么? if (windowwidth
以下的 JS 简写是什么: if (typeof bfMax !== 'undefined') { options.max = bfMax; } 最佳答案 有条件地赋值
假设我有父类 - “Parent”,我想从中创建三个对象 - o1、o2、o3。 因此,如果有一个简略的方法或一种漂亮的方法来执行以下操作: o1=Parent() o2=Parent() o3=Pa
这个问题已经有答案了: Check variable equality against a list of values (16 个回答) 已关闭 5 年前。 我觉得我经常遇到这种情况,直觉上应该有一
我是 Swift 的新手,我想知道是否有一种“速记”形式,可以在不执行 if nil 检查的情况下将可选值分配给非可选值。 例如,如果我有一个可选的闭包: var onTap: (() -> Void
这个问题在这里已经有了答案: Why does the expression 0 < 0 == 0 return False in Python? (9 个回答) 关闭 4 年前。 if x ==
这个问题在这里已经有了答案: CSS select multiple descendants of another element (3 个答案) 关闭 5 年前。
假设我正在使用一些 python 包中的类,如下所示 class foo(object): def __init__(self): self.a = None
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 8 年前。 Improve t
top right bottom left 或 width 有任何简写和高度 ? 我有很多这样的CSS #topDiv { position:absolute; top:0px;
这个问题在这里已经有了答案: 关闭9年前。 Possible Duplicate: Ternary conditional operator in Python 我想在 python 中做以下事情:
if-else 的 JavaScript 简写可以从函数中返回吗?如果是这样,这将如何运作。 例如。我有这个: if(boolean){ return; } 我想这样写: (value)? retu
我是一名优秀的程序员,十分优秀!