我想__str__在对象尚未实现的情况下动态实现对象的方法.
我尝试使用hasattr(obj, '__str__')它总是返回我的真实,因为它从对象类中提取它.
有没有办法确定对象是否实际实现__str__?
我知道我可以使用,inspect.getmembers(obj)但我正在寻找一种更加pythonic的方式
编辑
class Employee(object):
def __init__(self, name, age, emp_code):
self.name = name
self.age = age
self.emp_code = emp_code
Run Code Online (Sandbox Code Playgroud)
测试
e = Employee("A", 23, "E1")
print hasattr(e, '__str__')
>> True
Run Code Online (Sandbox Code Playgroud)
我希望hasattr返回False,因为Employee类没有实现str
解决方案(感谢所有贡献者,总结如下)
False在对象上实现使用object__str__方法使用hasattr(obj, '__str__')我想反向排序下面的流,但得到编译时错误"The method sorted() in the type IntStream is not applicable for the arguments ((<no type> o1, <no type> o2) -> {})".谁能纠正这个
IntStream.range(1, 100)
.filter(x -> x%2 != 0)
.sorted((o1,o2) -> -o1.compareTo(o2))
.forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud) 如果字符串中的所有字符都是数字并且至少有一个字符,则返回true,否则返回false.数字包括十进制字符和需要特殊处理的数字,例如兼容性上标数字.形式上,数字是具有属性值Numeric_Type = Digit或Numeric_Type = Decimal的字符.
所以听起来isdigit应该是超集isdecimal.但随后文档isdecimal说
如果字符串中的所有字符都是十进制字符并且至少有一个字符,则返回true,否则返回false.十进制字符是来自一般类别"Nd"的字符.此类别包括数字字符,以及可用于形成十进制数字的所有字符,例如U + 0660,ARABIC-INDIC DIGIT ZERO.
这听起来isdecimal应该是一个超集isdigit.
这些方法有何关联?他们中的一个是否匹配另一个匹配的严格超集?Numeric_Type属性是否与Nd类别有关?(这个矛盾的文档是文档错误吗?)
JLS版本8中的表15.25-B表示条件表达式的类型
true ? null : 0.0
Run Code Online (Sandbox Code Playgroud)
是的lub(null,Double),4.10.4节lub似乎是一些疯狂的难以理解的事情.
这看起来与Double某种类型的类型不同,或者它们可能只是编写Double,就像它们在表中的其他地方所做的那样.但不清楚差异可能是什么.我试图从第4.10.4节开始研究它,但到了我接触到的部分时
让lub(U1 ... Uk)成为:
最佳(W1)&...&Best(Wr)
看起来他们说这种类型是null和Double类型的交集类型,这没有任何意义.
什么是lub(null, Double)?具有此类型的条件表达式与其类型刚刚定义为不同的行为有何不同Double?
最近,我一直在深入研究Go的源代码.当我查看sync.Pool的细节时,我发现了一条我无法理解的评论.
https://golang.org/src/sync/pool.go?s=1633:1992#L58
// Local per-P Pool appendix.
type poolLocalInternal struct {
private interface{} // Can be used only by the respective P.
shared []interface{} // Can be used by any P.
Mutex // Protects shared.
}
Run Code Online (Sandbox Code Playgroud)
本地per-P Pool附录.
per-P是什么意思?
只能由相应的P使用
P是什么意思?
既然Python 3.7使得保留顺序的dicts 正式成为语言规范的一部分而不是实现细节,那么我一直在努力探讨如何最好地使用这个属性.今天,我发现我需要一个订单保留集,并认为字典可以做到这一点.
假设我们有一个hashable元素列表.我们需要一个唯一条目列表,我们希望根据首次出现保留这些条目的顺序.一个简单的字典构造函数应该做的伎俩:
ls = "Beautiful is better than ugly. Explicit..."
uniques = list({s:0 for s in ls})
>>> ['B', 'e', 'a', 'u', 't', 'i', 'f', 'l', ' ', 's', 'b', 'r', 'h', 'n', 'g', 'y', '.', 'E', 'x', 'p', 'c']
Run Code Online (Sandbox Code Playgroud)
这将通过首次出现保留排序并消除所有重复.
我想知道社区对这个用例以及一般的订单保留功能的看法.
通过Python的Zen阅读,我很矛盾.该方法很简单,但依赖于隐式排序.
请让我知道你在想什么.谢谢.
为什么Python中返回True时,我比较int和float具有相同价值的物品?
例如:
>>> 5*2 == 5.0*2.0
True
Run Code Online (Sandbox Code Playgroud) 是否有任何关于Math.random应该产生多少随机位的要求?我对Chrome和Firefox的实现进行了一些测试,将结果转换为十六进制以检查位,Firefox 27.0.1给出了类似的结果
0x1.de619579d56f3p-1
0x1.ef1ada9306decp-2
0x1.df3b75e208ce6p-1
Run Code Online (Sandbox Code Playgroud)
而Chrome版本33.0.1750.154米给出
0x1.1190f39c00000p-2
0x1.b959e3b600000p-1
0x1.90f614b400000p-2
Run Code Online (Sandbox Code Playgroud)
相比之下,这是一个神圣的.它似乎是一个32位的结果,而Firefox的值似乎使用53个随机位.
python ×4
java ×2
javascript ×2
python-3.x ×2
go ×1
int ×1
java-8 ×1
java-stream ×1
node.js ×1
python-3.7 ×1
random ×1
scala ×1
sorting ×1
types ×1
unicode ×1