标签: magic-methods

JavaScript中的魔术方法

JavaScript下的任何魔术(al)方法都是

我在明确兴趣setter方法,getter方法可调用(函数/方法),像我们在PHP:__set,__get__call&& __callStatic.

我在谷歌上搜索和搜索StackOverflow,但没有结果.

如果有人被告知,请,谢谢!

javascript php magic-methods

12
推荐指数
1
解决办法
2万
查看次数

检查魔法设置属性上是否存在属性

有很多关于这个问题的SO问题,特别是这个问题,但它对我没有帮助.

有之间的模糊性property_existsisset如此前问我的问题,我要指出来:

property_exists

property_exists检查对象是否包含属性而不查看其值,它只查看其可见性.

所以在下面的例子中:

<?php

class testA
{
  private $a = null;
}
class testB extends testA
{
}

$test = new testA();
echo var_dump(property_exists($test, 'a')); // true

// parent's private property becomes invisible for its child

$test = new testB();
echo var_dump(property_exists($test, 'a')); // false
Run Code Online (Sandbox Code Playgroud)

isset

isset检查属性中是否存在值false, 如果值等于,则设置为未设置null.

<?php

$var = null;
echo var_dump(isset($var)); // false

$var = '';
echo var_dump(isset($var)); // …
Run Code Online (Sandbox Code Playgroud)

php properties isset magic-methods

12
推荐指数
1
解决办法
9395
查看次数

Python类方法链接

为了避免迷失在架构决策中,我会用一个类似的例子来问这个问题:

假设我想要一个像这样的Python类模式:

queue = TaskQueue(broker_conn)
queue.region("DFW").task(fn, "some arg") 
Run Code Online (Sandbox Code Playgroud)

这里的问题是如何让设计成为一个类,以便某些方法可以以这种方式"链接".

task()需要访问queue类实例属性,操作task取决于输出region().

我看到SQLalchemy做了这个(见下文),但我很难深入挖掘他们的代码并隔离这种模式.

query = db.query(Task).filter(Task.objectid==10100) 
Run Code Online (Sandbox Code Playgroud)

python magic-methods python-2.7

12
推荐指数
2
解决办法
4771
查看次数

如何在PHP中实现__isset()魔术方法?

我正在尝试使用类似函数empty()isset()使用方法返回的数据.

到目前为止我所拥有的:

abstract class FooBase{

  public function __isset($name){
    $getter = 'get'.ucfirst($name);
    if(method_exists($this, $getter))
      return isset($this->$getter()); // not working :(
      // Fatal error: Can't use method return value in write context 
  }

  public function __get($name){
    $getter = 'get'.ucfirst($name);
    if(method_exists($this, $getter))
      return $this->$getter();
  }

  public function __set($name, $value){
    $setter = 'set'.ucfirst($name);
    if(method_exists($this, $setter))
      return $this->$setter($value);
  }

  public function __call($name, $arguments){
    $caller = 'call'.ucfirst($name);
    if(method_exists($this, $caller)) return $this->$caller($arguments);   
  }

}
Run Code Online (Sandbox Code Playgroud)

用法:

class Foo extends FooBase{
  private $my_stuff;

  public function …
Run Code Online (Sandbox Code Playgroud)

php class isset magic-methods

11
推荐指数
1
解决办法
7266
查看次数

为什么对魔术方法的显式调用比"含糖"语法慢?

当我遇到一组奇怪的时序结果时,我正在搞乱一个小的自定义数据对象需要可以清洗,可比较和快速.这个对象的一些比较(和散列方法)只是委托给一个属性,所以我使用的是:

def __hash__(self):
    return self.foo.__hash__()
Run Code Online (Sandbox Code Playgroud)

但经过测试,我发现它hash(self.foo)明显更快.出于好奇,我测试__eq__,__ne__和其他神奇的比较,才发现所有的人跑得更快,如果我用含糖的形式(==,!=,<等).为什么是这样?我认为加糖形式必须在引擎盖下进行相同的函数调用,但也许情况并非如此?

Timeit结果

设置:围绕控制所有比较的实例属性的薄包装器.

Python 3.3.4 (v3.3.4:7ff62415e426, Feb 10 2014, 18:13:51) [MSC v.1600 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import timeit
>>> 
>>> sugar_setup = '''\
... import datetime
... class Thin(object):
...     def __init__(self, f):
...             self._foo = f
...     def __hash__(self):
...             return hash(self._foo)
...     def __eq__(self, other):
...             return self._foo …
Run Code Online (Sandbox Code Playgroud)

python performance syntactic-sugar magic-methods

11
推荐指数
1
解决办法
313
查看次数

为什么我的类没有通过“def __int__”或“def _init_”初始化?为什么我会收到“不带参数”类型错误或属性错误?

如果您的问题作为此问题的重复项而被关闭,那是因为您有一个代码示例,其中包含以下任一内容:

class Example:
    def __int__(self, parameter):
        self.attribute = parameter
Run Code Online (Sandbox Code Playgroud)

或者:

class Example:
    def _init_(self, parameter):
        self.attribute = parameter
Run Code Online (Sandbox Code Playgroud)

当您随后尝试创建该类的实例时,会发生错误:

>>> Example("an argument")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: Example() takes no arguments
Run Code Online (Sandbox Code Playgroud)

(在某些版本的 Python 中,错误可能会显示TypeError: object.__new__() takes no parameters。)

或者,该类的实例似乎缺少属性:

>>> class Example:
...     def __int__(self): # or _init_
...         self.attribute = 'value'

>>> Example().attribute
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'Example' object has no …
Run Code Online (Sandbox Code Playgroud)

python initialization class typeerror magic-methods

11
推荐指数
1
解决办法
5733
查看次数

如何在__call中使用is_callable?

我使用PHP 5.3,它引入了闭包.因为我现在在我的应用程序(和框架)中都有可用的闭包,所以我使用is_callable来查看是什么类型的处理程序$callback.

如果$callback is_callable,我足够了解并使用该函数/方法/闭包.如果它不可调用并且它是一个字符串,那么它可能是$this类中方法的名称.它可能存在,也可能不存在.如果我让它升级到PHP,它将"抛出"一个很好的致命错误(我喜欢那些).

但我想使用mix-ins,这意味着我需要魔术方法__call.__call非常酷,因为它(可以)在实际函数调用之前包含(s)逻辑.但是 ......如果在__call被叫方法不存在之后会发生什么?当然,我可以抛出一个例外,但直到之后我们才会知道.

问题现在是有用的is_callable,因为在实现之后__call,一切都将返回true,因为一切都有回退(存在__call).

有没有办法同时拥有:动态方法和有用的方法is_callable

我希望看到的是某种可缓存的魔术方法__is_callable,PHP将在is_callable(array($object, $method))调用时"咨询" .

在php.net上,我找不到任何像我这样对此感到愚蠢的人.这不可能!如果你使用__call,你就不is_callable能再使用了!?

我有意义吗?

PS.我已经研究过了,method_exists但这还不够好(即使我可以过滤掉所有的闭包和全局函数),因为它将为私有和受保护的方法以及公共方法返回true.

编辑
我制作了一个'更好'的is_callable来检查混音,但我认为它非常昂贵.

php overriding overloading call magic-methods

10
推荐指数
1
解决办法
3421
查看次数

哪种特殊方法在Python中绕过__getattribute__?

除了为了正确性而绕过任何实例属性之外,隐式特殊方法查找通常也会绕过__getattribute__()对象的元类的方法.

文档提到了特殊方法,例如__hash__,__repr____len__,我从经验中知道它也包括__iter__Python 2.7.

引用相关问题的答案:

"魔术__methods__()被特别对待:它们被内部分配到类型数据结构中的"插槽"以加速他们的查找,并且只在这些插槽中查找."

为了改善我对另一个问题的回答,我需要知道:具体来说,我们在谈论哪些方法?

python magic-methods

10
推荐指数
1
解决办法
1450
查看次数

在join()期间是否在列表中的对象上调用了任何魔术方法?

加入包含对象的列表 - 在加入失败之前,我可以设置任何魔术方法将对象转换为字符串吗?

', '.join([…, Obj, …])
Run Code Online (Sandbox Code Playgroud)

我尝试过__str__,__repr__但都没有奏效

python join magic-methods

10
推荐指数
1
解决办法
179
查看次数

内置魔术变量名称/属性

背景:对于那些不熟悉它的人, Sublime Text(和TextMate)通过由.tmLanguage语言定义文件定义的范围提供语法高亮和其他功能,基本上是一组用于识别给定语言中各种结构的正则表达式,例如函数定义,各种类型的字符串,保留字等

我是Python改进包的维护者(如果你感兴趣,可以通过Package Control获得),它旨在成为Python的更好的语言定义.如果需要,您可以在GitHub上阅读它,但其中一个关键特性是它实际上是维护的,这与许多未经过多年更改或更新的Sublime语言不同.

问题:我最近一直关注双重强调的__magic__东西,在找到Rafe Kettler关于魔术函数的优秀论文之后,我能够扩展语言定义的那一部分.但是,我找到一个很好的内置魔术变量名称或魔术属性列表,比如__class__或者运气少了__doc__.我已经浏览了文档的数据模型部分,但它为我的目的留下了一些不足之处,似乎主要关注魔术方法名称.

所以我的问题是,support.variable.magic.python范围应该包含哪些内容?这是它到目前为止的定义:

\b__(all|bases|class|debug|dict|doc|file|members|metaclass|methods|module|name|slots|weakref)__\b
Run Code Online (Sandbox Code Playgroud)

我开始这个项目的原因之一就是自学了更多关于Python的知识,到目前为止我确实取得了成功,但是我有点陷入困境.

为了清楚起见,我不是在寻找一个最喜欢的场外资源(尽管如果你有一个方便的链接,我会很感激)并且我不是要开始一个自以为是的讨论.我想弄清楚的是,这个列表是否看起来是合理的,或者是否有任何明显的错误.如果你确实想要自以为是,请打开一个问题,我非常乐意与你讨论.

谢谢!

python syntax built-in magic-methods sublimetext

10
推荐指数
2
解决办法
1万
查看次数