Questions tagged «magic-methods»

当使用某种事件或语言构造时,魔术方法由编程语言隐式调用。


14
Python __call__特殊方法的实际示例
我知道__call__调用类的实例时会触发类中的方法。但是,我不知道何时可以使用这种特殊方法,因为一个人可以简单地创建一个新方法并执行在__call__方法中完成的相同操作,而无需调用实例,而可以调用该方法。 如果有人给我这种特殊方法的实际用法,我将不胜感激。

7
为什么Python使用“魔术方法”?
我最近一直在使用Python,而我发现有点奇怪的是,广泛使用了“魔术方法”,例如,使其长度可用,一个对象实现一个方法,def __len__(self)然后在你写len(obj)。 我只是想知道为什么对象不能简单地定义一个len(self)方法并直接将其作为对象的成员来调用,例如obj.len()?我敢肯定,Python这么做的确有充分的理由,但是作为一个新手,我还没有弄清楚它们到底是什么。

3
python numpy.where()如何工作?
我正在玩耍numpy并浏览文档,并且遇到了一些魔术。即我正在谈论numpy.where(): >>> x = np.arange(9.).reshape(3, 3) >>> np.where( x > 5 ) (array([2, 2, 2]), array([0, 1, 2])) 它们如何在内部实现您能够将类似的东西传递x > 5给方法的功能?我想这与它有关,__gt__但是我正在寻找详细的解释。

4
Python类的__dict __.__ dict__属性是什么?
>>> class A(object): pass ... >>> A.__dict__ <dictproxy object at 0x173ef30> >>> A.__dict__.__dict__ Traceback (most recent call last): File "<string>", line 1, in <fragment> AttributeError: 'dictproxy' object has no attribute '__dict__' >>> A.__dict__.copy() {'__dict__': <attribute '__dict__' of 'A' objects> ... } >>> A.__dict__['__dict__'] <attribute '__dict__' of 'A' objects> # What …

2
到目前为止我还无法理解的scala slick方法
我尝试了解一些Slick的作品以及它的要求。 这里是一个例子: package models case class Bar(id: Option[Int] = None, name: String) object Bars extends Table[Bar]("bar") { def id = column[Int]("id", O.PrimaryKey, O.AutoInc) // This is the primary key column def name = column[String]("name") // Every table needs a * projection with the same type as the table's type parameter …

8
PHP __get和__set魔术方法
除非我完全误解,否则__getand__set方法应该允许→get和的重载set。 例如,以下语句应调用该__get方法: echo $foo->bar; $var = $foo->bar; 并且以下应使用该__set方法: $foo->bar = 'test'; 这在我的代码中不起作用,并且可以通过以下简单示例重现: class foo { public $bar; public function __get($name) { echo "Get:$name"; return $this->$name; } public function __set($name, $value) { echo "Set:$name to $value"; $this->$name = $value; } } $foo = new foo(); echo $foo->bar; $foo->bar = 'test'; echo …

4
使python用户定义的类可排序,可哈希化
在python中使用户定义的类可排序和/或可哈希化时,需要重写/实现哪些方法? 需要注意的陷阱是什么? 我输入dir({})解释器以获取内置字典的方法列表。其中,我假设我需要一些实现 ['__cmp__', '__eq__', '__ge__', '__gt__', '__hash__', '__le__', '__lt__', '__ne__'] 与Python2相比,必须为Python3实现哪些方法有区别吗?

2
如何为IDE记录魔术(_call和_callStatic)方法
在用记事本++和sublime进行了许多快乐的编码之后,建议我尝试使用PHP IDE。我正在尝试phpStorm,看起来不错。代码完成和文档是一个很棒的功能,但是当使用魔术方法时,对我来说却行不通。是否有解决方法使phpStorm了解魔术方法的状况? 我们的情况是这样的: abstract class a { public static function __callStatic($method,$args) { if(strpos($method,"get_by_") === 0) { //do stuff } elseif(strpos($method,"get_first_by_") === 0) { //do stuff } elseif($method == "get_all") { //do stuff } } } class b extends a { // some more stuff } b::get_by_user_id(27); b::get_first_by_id(156); b::get_all(); 神奇的callStatic方法使我们能够通过1个或多个组成函数调用的参数来获取对象的集合。 我看到在这些情况下有一个@method语句可以使用,但是phpStorm仅选择了这些语句中的第一个。此外,我只能将返回类型设置为“ …

3
Scala的apply()方法魔术如何工作?
在Scala中,如果定义了apply在类或顶级对象中调用的方法,则每当我在该类的实例后面加上一对括号并apply()在它们之间放置适当的参数时,就会调用该方法。例如: class Foo(x: Int) { def apply(y: Int) = { x*x + y*y } } val f = new Foo(3) f(4) // returns 25 因此,基本上,object(args)只是的语法糖object.apply(args)。 Scala如何进行这种转换? 是否存在全局定义的隐式转换,类似于Predef对象中的隐式类型转换(但种类不同)?还是更深层的魔力?我问,是因为Scala似乎强烈赞成一致地应用较小的规则集,而不是许多例外的规则。最初,这对我来说似乎是个例外。

10
是否可以重载Python分配?
有没有一种魔术方法可以重载赋值运算符,例如__assign__(self, new_value)? 我想禁止为实例重新绑定: class Protect(): def __assign__(self, value): raise Exception("This is an ex-parrot") var = Protect() # once assigned... var = 1 # this should raise Exception() 可能吗?疯了吗 我应该吃药吗?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.