我正在构建一个重用和简单的ORM库; 一切都很顺利,除了我被一个愚蠢的继承限制所困扰.请考虑以下代码:
class BaseModel {
/*
* Return an instance of a Model from the database.
*/
static public function get (/* varargs */) {
// 1. Notice we want an instance of User
$class = get_class(parent); // value: bool(false)
$class = get_class(self); // value: bool(false)
$class = get_class(); // value: string(9) "BaseModel"
$class = __CLASS__; // value: string(9) "BaseModel"
// 2. Query the database with id
$row = get_row_from_db_as_array(func_get_args());
// 3. Return the filled instance
$obj = new $class(); …Run Code Online (Sandbox Code Playgroud) 在我的Python应用程序中,我想创建一个既是a staticmethod又是a的方法abc.abstractmethod.我该怎么做呢?
我尝试应用两个装饰器,但它不起作用.如果我这样做:
import abc
class C(object):
__metaclass__ = abc.ABCMeta
@abc.abstractmethod
@staticmethod
def my_function(): pass
Run Code Online (Sandbox Code Playgroud)
我得到一个异常*,如果我这样做:
class C(object):
__metaclass__ = abc.ABCMeta
@staticmethod
@abc.abstractmethod
def my_function(): pass
Run Code Online (Sandbox Code Playgroud)
不强制执行抽象方法.
如何制作抽象静态方法?
*例外:
File "c:\Python26\Lib\abc.py", line 29, in abstractmethod
funcobj.__isabstractmethod__ = True
AttributeError: 'staticmethod' object has no attribute '__isabstractmethod__'
Run Code Online (Sandbox Code Playgroud) 我只是在阅读教科书中给我的文字,我不确定我是否理解它的含义.它基本上告诉我静态方法或类方法包含"modifier"关键字static.但我真的不知道这意味着什么?
有人可以用非常简单的术语向我解释静态或类方法是什么?
另外,我可以获得一个关于Instance方法的简单解释吗?
这是他们在教科书中给我的:
静态改性剂的存在与否存在重要的实际意义.只要Java处理它所属的类的定义,就可以调用并执行公共类方法.实例方法不是这种情况.在可以调用和执行公共实例方法之前,必须创建它所属的类的实例.要使用公共类方法,您只需要该类.另一方面,在使用公共实例方法之前,必须具有该类的实例.
在另一个方法的定义中调用静态方法的方式根据两个方法是否属于同一个类而不同.在上面的示例中,factorial和main都是MainClass类的方法.因此,在main的定义中调用factorial只是引用方法名称"factorial".
当我有一个常规方法来调用类中的另一个方法时,我必须这样做
class test:
def __init__(self):
pass
def dosomething(self):
print "do something"
self.dosomethingelse()
def dosomethingelse(self):
print "do something else"
Run Code Online (Sandbox Code Playgroud)
但是当我有静态方法时,我无法写
self.dosomethingelse()
Run Code Online (Sandbox Code Playgroud)
因为没有实例.我如何在Python中从同一个类的另一个静态方法调用静态方法?
编辑:多么糟糕.好的,我把问题编辑回原来的问题.我已经得到了Peter Hansen评论中第二个问题的答案.如果你认为我应该为我已经拥有的答案打开另一个问题,请告诉我.
我有这个方法,我想使用$ this,但我得到的是:致命错误:当不在对象上下文中时使用$ this.
我怎样才能让它发挥作用?
public static function userNameAvailibility()
{
$result = $this->getsomthin();
}
Run Code Online (Sandbox Code Playgroud) 为什么ReSharper会在方法变为静态时抱怨,但不是?
是因为只创建了静态方法的一个实例(在类型上),从而节省了性能?
我是一名Java开发人员,他开玩笑地玩弄Python.我最近偶然发现了这篇文章,其中提到了Java程序员在学习Python时常犯的错误.第一个引起了我的注意:
Java中的静态方法不能转换为Python类方法.哦,当然,它会产生或多或少相同的效果,但类方法的目标实际上是做一些在Java中通常甚至不可能的事情(比如继承非默认的构造函数).Java静态方法的惯用翻译通常是模块级函数,而不是类方法或静态方法.(静态最终字段应转换为模块级常量.)
这不是一个性能问题,但是一个必须使用Java-idiom代码的Python程序员会因为输入Foo.Foo.someMethod而感到非常烦恼,因为它应该只是Foo.someFunction.但请注意,调用classmethod涉及额外的内存分配,调用static方法或函数不会.
哦,所有那些Foo.Bar.Baz属性链也不是免费的.在Java中,编译器会查找那些带点名称的名称,因此在运行时,它们中有多少名称并不重要.在Python中,查找在运行时发生,因此每个点都很重要.(请记住,在Python中,"Flat优于嵌套",虽然它与"可读性计数"和"简单优于复杂"相关,而不是与性能有关.)
我发现这有点奇怪,因为staticmethod的文档说:
Python中的静态方法与Java或C++中的静态方法类似.另请参阅classmethod()以获取对创建备用类构造函数有用的变体.
更令人费解的是这段代码:
class A:
def foo(x):
print(x)
A.foo(5)
Run Code Online (Sandbox Code Playgroud)
在Python 2.7.3中按预期失败,但在3.2.3中工作正常(尽管你不能在A的实例上调用该方法,只能在类上调用.)
因此,有三种方法可以实现静态方法(如果使用classmethod计算,则有四种方法),每种方法都有细微差别,其中一种看似无法记录.这似乎与Python的口头禅是不一致的应该有一个 - 最好只有一个 - 明显的方式来做到这一点.哪个成语是最Pythonic?各自的优点和缺点是什么?
这是我到目前为止所理解的:
模块功能:
静态方法:
类方法:
常规方法(仅限Python 3):
我是否想过这个?这不是问题吗?请帮忙!
我在mac上编写C++代码.编译时为什么会出现此错误?:
体系结构i386的未定义符号:"Log :: theString",引用自:libTest.a中的Log :: method(std :: string)(Log.o)ld:未找到体系结构i386 clang的符号:错误:链接器命令失败,退出代码为1(使用-v查看调用)
不确定我的代码是否错误或者我必须向Xcode添加其他标志.我当前的XCode配置是"静态库"项目的默认配置.
我的代码:
Log.h ------------
#include <iostream>
#include <string>
using namespace std;
class Log{
public:
static void method(string arg);
private:
static string theString ;
};
Run Code Online (Sandbox Code Playgroud)
Log.cpp ----
#include "Log.h"
#include <ostream>
void Log::method(string arg){
theString = "hola";
cout << theString << endl;
}
Run Code Online (Sandbox Code Playgroud)
我用测试代码调用'方法',这样:'Log :: method("asd"):'
谢谢你的帮助.
我有静态变量的概念,但静态方法在类中有什么好处.我曾经参与过一些项目,但我并没有将方法设为静态.每当我需要调用类的方法时,我创建该类的对象并调用所需的方法.
问:方法中的静态变量即使在执行方法时仍保持其值,但只能在其包含的方法中访问,但静态方法的最佳定义是什么?
问:调用静态方法而不创建该类的对象是静态方法的唯一好处吗?
问:静态方法的可访问范围是多少?
谢谢
我使用C++从以下代码中收到错误.
Main.cpp的
#include "file.h"
int main()
{
int k = GetInteger();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
File.h
static int GetInteger();
Run Code Online (Sandbox Code Playgroud)
File.cpp
#include "file.h"
static int GetInteger()
{
return 1;
}
Run Code Online (Sandbox Code Playgroud)
我得到的错误:
Error C2129: static function 'int GetInteger(void)' declared but not defined.
Run Code Online (Sandbox Code Playgroud)
我读过着名的文章"用C和C++组织代码文件",但不明白这段代码有什么问题.
static-methods ×10
python ×3
c++ ×2
oop ×2
php ×2
c# ×1
clang ×1
inheritance ×1
java ×1
non-static ×1
resharper ×1
static ×1
this ×1
xcode ×1