首页 > TAG信息列表 > magic-methods
是$this-> __ invoke();吗?在PHP中100%安全有效吗?
// in class public function test () { $this->__invoke(); } $inst->test(); 该测试运行无任何错误. 我的问题:为什么不应该这样做?是否有任何极端情况,隐藏的警告或它的行为类似于任何常规函数/方法?解决方法:那应该不起作用,因为您的类中没有__invoke()方法: class SomeCla如何在Python3文件中打印__repr__? (不在外壳中)
我知道在Python Shell中键入>>>对象,它显示object .__ repr__方法,如果键入>>> print(object)它显示object .__ str__方法. 但是我的问题是,执行Python文件时是否有一种简短的方法来打印__repr__? 我的意思是,在file.py中,如果我使用print(object),它将显示object .__ str__;如果我只为什么空的__set()方法比起作用的方法慢?
我在玩弄PHP魔术方法(特别是Property overloading),并且在进行微基准测试时遇到了一个奇怪的问题,我无法解释: 似乎具有空主体的__set方法比有效的方法花费更多的时间来运行.下面的代码段演示了这一点: class EmptySetter { public function __set($name, $value) {} } class N为什么魔术方法没有被python中的__getattr__实现拦截?
主题 例: MyList(object): def __init__(self, list_to_be_wrapped): self._items = list_to_be_wrapped def __getattr__(self, item): return getattr(self._items, item) 然后 MyList([1, 2, 3])[-1] 将引发:TypeError:“ MyList”对象不支持索php-__get()和__set()的最佳做法
从question开始,使用__get()和__set()访问私有变量,我想获得有关它们一般用法的输入.我想知道何时或何处是使用重载函数的最佳时间,以及在哪里使用了重载函数(如果有的话). 为了清楚起见,我们正在讨论以下功能:http://us2.php.net/manual/en/language.oop5.magic.php解决方法:惰性模php:在某些情况下避免__get?
我有一个正在使用__set的类.因为我不想让它设置任何内容,所以我有一个已批准的变量数组,在实际设置类属性之前会对其进行检查. 但是,在构造时,我希望__construct方法设置几个类属性,其中一些不在批准列表中.因此,当构造发生并且我执行$this-> var = $value时,我当然会得到例外,不允是否可以在PHP中实现类似数组的对象?
我想实现一个行为类似于数组的对象.应该以这种方式使用: $var = new CustomCollection(retrieveFromWebService()); echo $var[0]; // legal $var[0] = 'a'; // illegal 可以使用魔术方法或其他机制在PHP中完成此操作吗?解决方法:您的CustomCollection类将需要实现内置的ArrayAccesPython __index__特殊方法
>>> class Thing(object): ... def __index__(self): ... return 1 ... >>> thing = Thing() >>> list_ = ['abc', 'def', 'ghi'] >>> list_[thing] 'def' >>> dict_ = {为什么PHP在对象上下文中使用静态方法?
我有以下代码(例如,实际上,这是我的真实代码): <?php class Foobar { public static function foo() { exit('foo'); } } 当我运行$foobar = new FooBar; $foobar-> foo()显示foo. 为什么PHP会尝试在对象上下文中使用静态方法?有办法避免这种情况吗? 好吧,你们没有得到我python – 为什么在隐式__getitem __-调用时没有调用__getattribute__?
在尝试包装任意对象时,我遇到了字典和列表的问题.调查,我设法提出了一段简单的代码,其行为我根本不理解.我希望你们中的一些人可以告诉我发生了什么: >>> class Cl(object): # simple class that prints (and suppresses) each attribute lookup ... def __getattribute__(self,python – 我试图只打印一定数量的Pi,它返回错误“十进制没有属性:__ getitem__
def pi(): prompt=">>> " print "\nWARNING: Pi may take some time to be calculated and may not always be correct beyond 100 digits." print "\nShow Pi to what digit?" n=raw_input(prompt) from decim哪种特殊方法在Python中绕过__getattribute__?
In addition to bypassing any instance attributes in the interest of correctness, implicit special method lookup generally also bypasses the __getattribute__() method even of the object’s metaclass. The docs提到了__hash __,__repr__和__len__等特殊方法,我从经为什么Python使用’魔术方法’?
我最近一直在玩Python,有一件事我发现有点奇怪的是广泛使用’魔术方法’,例如为了使其长度可用,一个对象实现了一个方法,def __len __(self),然后在你写len(obj)时调用它. 我只是想知道为什么对象不是简单地定义一个len(self)方法并且直接调用它作为对象的一个成员,例如obj.lenpython – 分配(而不是定义)一个__getitem__魔术方法打破了索引
参见英文答案 > Why won’t dynamically adding a `__call__` method to an instance work? 2个 我有一个类似于这个(强烈简化)示例的包装类: class wrap(object): def __init__(self): self.python – __str__和__repr__之间的区别?
Python中的__str__和__repr__有什么区别?解决方法:Alex总结得很好,但令人惊讶的是,它太简洁了. 首先,让我重申Alex’s post的要点: >默认实现是无用的(很难想到一个不会,但是是的) > __repr__的目标是明确的> __str__目标是可读的> Container的__str__使用包含的对象’__repr__ 默认php – 如果存在,则调用子clases’__ call方法,否则抛出异常
[edit]更新标题以更准确地反映问题 我试图解决的问题是:我需要知道是否通过parent ::调用方法,而我可以使用debug_backtrace,似乎必须有更好的方法来执行此操作. 我一直在研究后期的静态绑定,但也许我不太了解它能够深入了解解决方案. 有问题的方法是__call所以我不能简单地传入一个当在类中定义Magic Method __get和__set时,PHP函数为空不起作用
目前我在YII框架中工作,在那里我创建了一个扩展CFormModel的类, 在该类中,我重写以下函数: public function __get($name) public function __set($name, $value) 我已经进行了以下检查,以确保end_date和start_date不为空 if(!empty($this->end_date) AND !empty($this->start_dapython:概括委托方法
我有一个这样的类包含一个或多个数字元素. class Foo: # ... other methods ... def _update(self, f): # ... returns a new Foo() object based on transforming # one or more data members with a function f() def __add__(self, k):如何在PHP中完成__constructor后自动调用方法?
我写了一个名为Task的小抽象类.我喜欢让每个任务逻辑类扩展它. 在我的抽象类“Task”中,我喜欢调用在每个类中定义的已使用的已定义方法“execute”. 我尝试使用魔术方法__call,但它不起作用. 如果您在我的方法中注意到我正在回显一条从未在屏幕上打印的消息. 这是我的抽象Task类python中有type()的Magic方法吗?
我想知道Python中是否有支持type()内置函数的魔术方法,它允许您设置要返回的自定义值.解决方法:不,没有这样的方法.实例的类型不是您在查询时可以动态更改的类型,因为这将是特定于类型的行为,但您突然无法确定定义该行为的类型! 您可以为实例.__ class__指定一个不同的类,但随后您将如何使__set也适用于PHP中的静态操作?
当我调用self :: $parameter = 1; __set未被调用. 有办法解决吗?解决方法:从manual: Property overloading only works in object context. These magic methods will not be triggered in static context. Therefore these methods should not be declared static. As of PHP 5.3.魔术方法php,__ call __get和__set?
我的问题是,我们有一堂课: class SomeClass{ private $someProperty; public function __call($name,$arguments){ echo "Hello World"; } 现在当我说: $object = new SomeClass(); $object->someMethod(); 我的类中的__call方法将被调用. 当我说 $object->gphp – 如何实现_isset魔术方法?
我尝试实现__isset魔术方法,如下面的代码, 为什么我总是得到一个未定义的索引错误?任何人都可以告诉我该怎么办? class c { public $x = array(); public function __get($name) { return $this->x[$name]; //undefined index: #1:a / #2:b / #3:d } publicpython – `self [key] = value`的魔术方法?
对于赋值=对序列类型,有一个Python魔术方法__setitem__.在容器级别是否有增强赋值的神奇方法?该操作似乎优雅地分解为项类型的扩充分配.这是合乎逻辑的.但是对于其他几乎所有东西都有一种神奇的方法,我认为在序列类型上应该有一组这些运算符的方法.我错过了吗? 该应用程序是一种数据php – 动态创建Yii FormModel对象(CFormModel)
我正在开发一个涉及在高级抽象中生成表单的应用程序(它是一个CMS应用程序).我想动态创建CFormModel对象并动态设置表单字段.我想我可以通过扩展CFormModel,然后动态创建表示表单字段的类属性(Yii术语中的“属性”)来做到这一点. 为了说明,而不是在以下类中指定登录表单(在文件中定