标签: class-method

如何禁止在实例上调用类方法?

我一直在寻找 的源代码peewee,特别Model是该update函数:https://github.com/coleifer/peewee/blob/a33e8ccbd5b1e49f0a781d38d40eb5e8f344eee5/peewee.py#L4718

我不喜欢这样的事实:如果语句未与子句正确耦合,则任何更新操作都会影响模型中的每一行,可以从行实例调用此方法where。因此,我想找到某种方法来禁止从模型实例调用此类方法。

一些谷歌搜索让我相信这可能相当困难。delattr__init__似乎没有工作。从 update 函数运行isclass(self)总是返回 True,因为当我们在类方法内部时,我们实际上类而不是实例。

有什么建议么?

python cpython class-method peewee

6
推荐指数
1
解决办法
844
查看次数

为什么instance_eval()在类上调用时定义了一个类方法?

Foo = Class.new
Foo.instance_eval do
  def instance_bar
    "instance_bar"
  end
end
puts Foo.instance_bar       #=> "instance_bar"
puts Foo.new.instance_bar   #=> undefined method ‘instance_bar’
Run Code Online (Sandbox Code Playgroud)

我的理解是,在对象上调用instance_eval应该允许您为该对象定义实例变量或方法.

但是在上面的示例中,当您在类Foo上调用它来定义instance_bar方法时,instance_bar将成为可以使用"Foo.instance_bar"调用的类方法.很明显,这段代码没有创建实例方法,因为Foo.new.instance_bar导致"未定义的方法'instance_bar'".

为什么instance_eval在此上下文中定义类方法而不是实例方法?

ruby class-method instance-method

5
推荐指数
1
解决办法
1563
查看次数

使用类/静态方法作为同一类方法中的默认参数值

我想做这样的事情:

class SillyWalk(object):
    @staticmethod
    def is_silly_enough(walk):
        return (False, "It's never silly enough")
    def walk(self, appraisal_method=is_silly_enough):
        self.do_stuff()
        (was_good_enough, reason) = appraisal_method(self)
        if not was_good_enough:
            self.execute_self_modifying_code(reason)
        return appraisal_method
    def do_stuff(self):
        pass
    def execute_self_modifying_code(self, problem):
        from __future__ import deepjuju
        deepjuju.kiss_booboo_better(self, problem)
Run Code Online (Sandbox Code Playgroud)

这个想法是有人可以做的

>>> silly_walk = SillyWalk()
>>> appraise = walk()
>>> is_good_walk = appraise(silly_walk)
Run Code Online (Sandbox Code Playgroud)

还有一些神奇的机器学习正在发生; 最后一点对我来说并不是特别感兴趣,这只是我发现的第一件事,它是在函数上下文和调用者的角度来举例说明静态方法的使用.

无论如何,这不起作用,因为is_silly_enough它实际上不是一个函数:它是一个对象,其__get__方法将返回原始is_silly_enough函数.这意味着它仅在作为对象属性引用时以"正常"方式工作.有问题的对象是由staticmethod()装饰器放入SillyWalkis_silly_enough属性和最初用该名称定义的函数之间的函数创建的.

这意味着,为了appraisal_method其中一个 SillyWalk.walk 它的调用者中使用from 的默认值,我们必须要么

  • 打电话appraisal_method.__get__(instance, owner)(...)而不是打电话appraisal_method(...)
  • 或者将其指定为某个对象的属性,然后将该对象属性引用为我们调用的方法 …

python static-methods decorator default-value class-method

5
推荐指数
1
解决办法
848
查看次数

模板方法和模板类C++

类成员函数可以是模板函数,还是必须是静态类函数.基本上可以根据需要在技术上实例化类和功能吗?

使用模板函数作为模板类的成员有什么限制?两者都可以同时完成,还是两者都是?

c++ templates class-method

5
推荐指数
2
解决办法
183
查看次数

类方法也继承了吗?

当我定义一个继承自的新类时NSObject:

@interface Photo : NSObject
{
    NSString* caption;
    NSString* photographer;
}

@property NSString* caption;
@property NSString* photographer;

@end
Run Code Online (Sandbox Code Playgroud)

是新类继承的所有类方法(如alloc)吗?NSObjectPhoto

inheritance subclass objective-c class-method

5
推荐指数
1
解决办法
2250
查看次数

vbscript静态类变量/方法?

有没有办法在vbscript中为每个类创建一个变量?

如果不是,最好的方法是什么呢?前缀在类旁边声明的全局变量?

还有一种方法来声明静态/类方法(对于静态构造函数)或我是否强制为函数添加前缀?

oop vbscript static-methods static-variables class-method

5
推荐指数
1
解决办法
3589
查看次数

动态地将类方法添加到类中

我有以下代码段:

FEED_TYPES = [
    ('fan_mail',     'Fan Mail'),
    ('review',       'Review'),
    ('tip',          'Tip'),
    ('fan_user',     'Fan User'),
    ('fan_song',     'Fan Song'),
    ('fan_album',    'Fan Album'),
    ('played_song',  'Played Song'),
    ('played_album', 'Played Album'),
    ('played_radio', 'Played Radio'),
    ('new_event',    'New Event'),
]

class Feed:
    @classmethod
    def do_create(cls, **kwargs):
        print kwargs

    @classmethod
    def create(cls, type, **kwargs):
        kwargs['feed_type'] = type
        cls.do_create(**kwargs)

for type_tuple in FEED_TYPES:
    type, name = type_tuple

    def notify(self, **kwargs):
        print "notifying %s" % type
        self.create(type, **kwargs)

    notify.__name__ = "notify_%s" % type
    setattr(Feed, notify.__name__, classmethod(notify))

Feed.create("FanMail", to_profile="Gerson", from_profile="Felipe")
Feed.notify_fan_mail(to_profile="Gerson2", …
Run Code Online (Sandbox Code Playgroud)

python metaprogramming class-method

5
推荐指数
1
解决办法
181
查看次数

在NSClassFromString()返回的类上调用类方法

NSClassFromString(aClassName)返回名为aClassName的类的类对象.大.

现在如何在该类对象上调用类方法?对于

  Class moduleClass = NSClassFromString(aClassName);
Run Code Online (Sandbox Code Playgroud)

Xcode不允许我打电话

  AppModule* appModuleClass = moduleClass;
  [appModuleClass classMethod]     // actually that's an object instance...
Run Code Online (Sandbox Code Playgroud)

要么

  [((AppModule)moduleClass) classMethod];     // C-style cast not allowed
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么?谢谢.

objective-c foundation class-method

5
推荐指数
1
解决办法
2174
查看次数

速度静态方法与类方法

类方法和静态方法之间是否存在速度差异?我知道不同的用例,但有时我可以完全摆脱类方法,并想知道速度差异

python optimization static-methods class-method

5
推荐指数
1
解决办法
2675
查看次数

导入还是不导入classmethod?

我希望这不是一个愚蠢的问题,但我发现他们导入的classmethod代码和一些他们没有的代码,所以有区别?

我正在使用python 3.6,但我认为最初的代码是用于python 2.7(它使用的from __builtin__ import)

import unittest
from selenium import webdriver
from builtins import classmethod #original code was from __builtin__ import classmethod 


class HomePageTest(unittest.TestCase):
    @classmethod
    def setUp(cls):
        # create a new Firefox session
        cls.driver = webdriver.Firefox()
        cls.driver.implicitly_wait(30)
        cls.driver.maximize_window()

        # navigate to the application home page
        cls.driver.get("http://demo-store.seleniumacademy.com/")

    def test_search_field(self):
        pass

    #My tests without @classmethod

    @classmethod
    def tearDown(cls):
        # close the browser window
        cls.driver.quit()

if __name__ == '__main__':
    unittest.main(verbosity=2)
Run Code Online (Sandbox Code Playgroud)

python python-import class-method

5
推荐指数
1
解决办法
130
查看次数