标签: static-methods

如何在python中为类动态创建类方法

如果我定义一个小python程序

class a():
    def _func(self):
        return "asdf"

    # Not sure what to resplace __init__ with so that a.func will return asdf
    def __init__(self, *args, **kwargs):
         setattr(self, 'func', classmethod(self._func))

if __name__ == "__main__":
    a.func
Run Code Online (Sandbox Code Playgroud)

我收到回溯错误

Traceback (most recent call last):
  File "setattr_static.py", line 9, in <module>
    a.func
AttributeError: class a has no attribute 'func'
Run Code Online (Sandbox Code Playgroud)

我想弄清楚的是,如何在不实例化对象的情况下动态地将类方法设置为类?


编辑:

这个问题的答案是

class a():
    pass

def func(cls, some_other_argument):
    return some_other_argument

setattr(a, 'func', classmethod(func))

if __name__ == "__main__":
    print(a.func)
    print(a.func("asdf"))
Run Code Online (Sandbox Code Playgroud)

返回以下输出

<bound method type.func of <class '__main__.a'>> …
Run Code Online (Sandbox Code Playgroud)

python static-methods metaprogramming class setattr

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

Ruby on rails - 静态方法

我想要一个每5分钟执行一次的方法,我为ruby(cron)实现了.但它不起作用.我认为我的方法无法访问.我想要执行的方法位于一个类中.我想我必须将该方法设为静态,以便我可以访问它MyClass.MyMethod.但我找不到合适的语法,或者我找错了地方.

Schedule.rb

every 5.minutes do
  runner "Ping.checkPings"
end
Run Code Online (Sandbox Code Playgroud)

Ping.rb

def checkPings      
  gate =  Net::Ping::External.new("10.10.1.1")
  @monitor_ping = Ping.new()

  if gate.ping?        
    MonitorPing.WAN = true
  else 
    MonitorPing.WAN = false
  end

  @monitor_ping.save      
end
Run Code Online (Sandbox Code Playgroud)

ruby oop static-methods

54
推荐指数
3
解决办法
6万
查看次数

我们可以拥有静态虚函数吗?如果没有,那么为什么?

可能重复:
C++静态虚拟成员?

我们可以拥有静态虚函数吗?如果没有,那么为什么?

class X
{
public:
       virtual static void fun(){} // Why we cant have static virtual function in C++?
};
Run Code Online (Sandbox Code Playgroud)

c++ static-methods virtual-functions

54
推荐指数
2
解决办法
6万
查看次数

PHP可以static :: replace self ::?

我对这件事情有点困惑.我正在设计一个ORM类,它试图在ruby on rails上与ActiveRecord非常相似,但这不是重点.

我想说的是我的类广泛使用静态属性继承,特别是对数据库和表处理.我的问题是,我应该使用self ::

php static-methods static-members

53
推荐指数
2
解决办法
3万
查看次数

在python中调用静态方法

我在该类中有一个类Person和一个静态方法,名为call_person:

class Person:
    def call_person():
        print "hello person"
Run Code Online (Sandbox Code Playgroud)

在python控制台中,我导入类Person并调用Person.call_person().但它给我的错误说'module' object has no attribute 'call_person'.任何人都可以让我知道为什么我收到此错误?

python static-methods

52
推荐指数
4
解决办法
8万
查看次数

如何确保实用静态方法的线程安全?

是否存在任何通用方法或规则出口,通过这些方式或规则可以确保在任何应用程序的各种Utility类中专门使用的静态方法的线程安全性.在这里,我想特别指出Web应用程序的线程安全性.

众所周知,使用不可变对象作为参数的静态方法是线程安全的,而可变对象则不是.

如果我有一个实用程序方法进行某些操作java.util.Date并且该方法接受一个实例java.util.Date,那么这个方法就不是线程安全的.那么如何在不改变参数传递方式的情况下使其线程安全?

public class DateUtils {

    public static Date getNormalizeDate(Date date) {
        // some operations
    }   
}
Run Code Online (Sandbox Code Playgroud)

这类是javax.faces.context.FacesContext可变的吗?将此类的实例传递给此类静态实用程序方法是否安全?

这个类的列表,其实例可以作为参数传递或不能作为参数传递,可能很长; 那么在编写此类实用程序类的代码时,我们应该记住哪些要点?

java oop static-methods utility thread-safety

52
推荐指数
7
解决办法
5万
查看次数

我怎么知道这个C#方法是否是线程安全的?

我正在为ASP.NET缓存项目删除事件创建一个回调函数.

文档说我应该调用一个对象或调用我知道将存在的调用(将在范围内),例如静态方法,但它说我需要确保静态是线程安全的.

第1部分:我可以采取哪些措施使其非线程安全?

第2部分:这是否意味着,如果我有

static int addOne(int someNumber){
    int foo = someNumber;
    return foo +1; 
}
Run Code Online (Sandbox Code Playgroud)

我叫Class.addOne(5); 和Class.addOne(6); 同时,我可能会返回6或7,具体取决于谁首先调用foo?(即比赛条件)

c# concurrency static-methods

49
推荐指数
4
解决办法
2万
查看次数

如何创建自定义EL函数来调用静态方法?

我是JSF 2的新手.我的问题是关于BalusC对这个问题的回答jsf2 ajax基于请求参数更新部件 我尝试了kickstart代码BalusC发布并且我遇到了EL解析错误:

 /nameofpage.xhtml @12,64 rendered="#{bean.panels.contains('u1')}"
 Error Parsing: #{bean.panels.contains('u1')}
Run Code Online (Sandbox Code Playgroud)

我想这是因为我没有运行一个支持Servlet 3.0/EL 2.2的容器,并且根据Servlet 3.0规范声明了/WEB-INF/web.xml.我正在使用Tomcat 6.

BalusC在他的回答中建议创建一个自定义EL功能.但是如何使用自定义EL功能完成此操作?或者只需配置我项目的某些部分即可解决这个问题?

以下是我的web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
  <servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.jsf</url-pattern>
  </servlet-mapping>
  <context-param>
    <param-name>javax.faces.PROJECT_STAGE</param-name>
    <param-value>Development</param-value>    
  </context-param>      
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>index.html</welcome-file>
  </welcome-file-list>
</web-app>
Run Code Online (Sandbox Code Playgroud)

jsf static-methods function el jsf-2

49
推荐指数
1
解决办法
3万
查看次数

TypeScript:访问类中的静态方法(相同或其他方法)

假设我们有以下代码:

[Test.js file]:
class Test {
    ...
    public static aStaticFunction():void {
          ...

           this.aMemberFunction(); // <- Issue #1.
    }

    private aMemberFunction():void {
          ...

          this.aStaticFunction(); // <- Issue #2.
    }
}

[Another.js file]:
class Another {
    ...

    private anotherMemberFunction():void {
          Test.aStaticFunction(); // <- Issue #3.
    }
}
Run Code Online (Sandbox Code Playgroud)

请参阅Issue #x.我想解决的问题的评论(3).

我现在一直在玩一些配置,但我还没有完成.

你能帮我理解如何在三个地方访问这些方法吗?

谢谢.

javascript static-methods typescript

48
推荐指数
2
解决办法
7万
查看次数

为什么继承类静态方法而不继承接口静态方法?

我知道在Java中,静态方法就像实例方法一样继承,不同之处在于,当重新声明它们时,父实现被隐藏而不是被覆盖.好吧,这很有道理.但是,Java教程指出了这一点

接口中的静态方法永远不会被继承.

为什么?常规和接口静态方法有什么区别?

当我说静态方法可以继承时,让我澄清一下我的意思:

class Animal {
    public static void identify() {
        System.out.println("This is an animal");
    }
}
class Cat extends Animal {}

public static void main(String[] args) {
    Animal.identify();
    Cat.identify(); // This compiles, even though it is not redefined in Cat.
}
Run Code Online (Sandbox Code Playgroud)

然而,

interface Animal {
    public static void identify() {
        System.out.println("This is an animal");
    }
}
class Cat implements Animal {}

public static void main(String[] args) {
    Animal.identify();
    Cat.identify(); // This does not compile, because interface …
Run Code Online (Sandbox Code Playgroud)

java inheritance static-methods interface java-8

47
推荐指数
3
解决办法
9633
查看次数