gpt4 book ai didi

对象中的 PHP 和 Python 静态方法,两个不同的世界......?

转载 作者:太空宇宙 更新时间:2023-11-04 07:25:12 24 4
gpt4 key购买 nike

我是 php 程序员,想进入 python 世界,这对我来说很难。

在 php 中静态方法最大的好处是实例的自动生成器。无需声明对象,如果你需要它一次,在每个文件中(或使用不同的构造函数参数,在一行中)

<?php
class Foo {
function __constructor__(){
$this->var = 'blah';
}
public static function aStaticMethod() {
return $this->var;
}
}

echo Foo::aStaticMethod();
?>

我们可以从静态方法调用构造函数,不是吗?我们可以访问类中的所有内容,因为它是简单的方法...我们甚至可以在 php 类中使用 STATIC CONSTRUCTOR 并像这样调用它:Object::construct()->myMethod(); (每次传递不同的参数)

但不是在 python 中???? @staticmethod 使类中的方法成为一个简单的函数,完全看不到任何东西??

class socket(object):

def __init__(self):
self.oclass = otherclass()
print 'test' # does this constructor called at all when calling static method??

@staticmethod
def ping():
return self.oclass.send('PING') # i can't access anything!!!


print Anidb.ping()

我无法从那个该死的静态方法访问任何东西,它就像一个独立的函数或类似的东西..??

也许我使用了错误的装饰器?也许有类似 php 的东西在 python 中提供静态方法?

1) 请说出为什么静态方法是隔离的2) 请告诉我如何实现与 php 静态方法相同的行为。3) 如果 php 静态方法行为是一件坏事,请告诉我这个的其他实际用途

附言所有这一切的目标是尽可能少地编写代码。P.p.s 感谢对示例代码的大量评论

谢谢。

最佳答案

PHP 中的静态方法并不像您想象的那样,它们无法访问实例成员。没有 $this!和他们在一起。

<?php
class Foo {

public static $var = 'foo ';

function __construct(){
echo 'constructing ';
$this->var = 'blah ';
}

public function aMethod() {
return $this->var;
}
public static function aStaticMethod() {
#return $this->$var; -> you can't do that,
# $this can be accessed only in instance methods, not static
return self::$var;
}
}

$foo = new Foo();
echo $foo->aMethod();

echo Foo::aStaticMethod();

?>

Python 在对象中有三种方法 static 方法就像定义在类之外的函数,将它们放在对象中的唯一用途是将它们作为辅助函数保留在类中。 class 方法只能访问类中定义的变量(decorator @classmethod)。这或多或少就是 PHP 所说的静态成员或方法。这类方法的第一个参数应该是cls,类的内容可以通过cls访问。普通方法必须将 self 作为第一个参数,并且是唯一能够访问实例成员的方法。

如果你想要多个相同类型的对象,你肯定需要实例,而其他类型不是你要找的。如果您只有一个对象实例,则可以改用类方法(或 PHP 静态方法)。

但在大多数情况下,如果您不知道为什么而只坚持使用对象实例和普通方法,那么您不应该费心这样做,否则就是不成熟的优化,并且由于许多限制,您的代码可能会在以后咬住您你介绍一下。

关于对象中的 PHP 和 Python 静态方法,两个不同的世界......?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4314423/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com