从静态方法访问静态变量

     2023-02-21     101

关键词:

【中文标题】从静态方法访问静态变量【英文标题】:Access static variable from static method 【发布时间】:2012-06-29 07:53:46 【问题描述】:

我想通过静态方法访问静态变量:

#!/usr/bin/env python
class Messenger:
    name = "world"
    @staticmethod
    def get_msg(grrrr):
        return "hello " + grrrr.name

print Messenger.get_msg(Messenger)

如何在不将grrrr 传递给方法的情况下做到这一点?这是真正的 OOP 吗?..

nameself.name 之类的东西似乎都不起作用:

NameError: global name 'name' is not defined

NameError: global name 'self' is not defined

【问题讨论】:

【参考方案1】:

使用@classmethod 而不是@staticmethod。刚写完问题就找到了。

在许多语言(C++、Java 等)中,“静态”和“类”方法是同义词。 Not in Python.

【讨论】:

【参考方案2】:
def get_msg():
    return "hello " + Messenger.name

你不能使用 self.name 因为 self 没有定义。 self 是非静态或非类方法方法的第一个参数的命名约定。它指向您调用该方法的对象。由于您的方法是静态的,因此您不需要对象来调用它。

【讨论】:

所以要访问类的静态方法中的静态变量,我必须将类名添加到我正在访问的静态变量前面,就像您在答案中显示的那样? @RaynerDaCruz 如果您在@staticmethod 中访问它,那么是的,您需要为类名添加前缀。如果它是@classmethod,那么您也可以使用您的方法的cls 参数。差异在这里得到了很好的描述:medium.com/school-of-code/…

从 C 中的另一个文件访问全局静态变量

】从C中的另一个文件访问全局静态变量【英文标题】:AccessaglobalstaticvariablefromanotherfileinC【发布时间】:2010-12-3016:45:34【问题描述】:在C语言中,我想访问文件范围之外的全局静态变量。让我知道最好的方法。其中一种方法是... 查看详情

访问静态变量 C# [重复]

】访问静态变量C#[重复]【英文标题】:AccessingStaticVariablesC#[duplicate]【发布时间】:2015-06-1213:58:49【问题描述】:我有一个简单的静态类,用于从应用程序的任何地方访问我的AVLTree。但是由于某种原因,我无法从另一个类中调用... 查看详情

main静态方法非静态方法

静态方法不可以调非静态全局变量,从内存的角度看,就是当类被加载的时候静态方法和静态属性(全局静态变量)被加载到内存中,就是在内存中开辟一段内存地址用来保存静态方法和静态属性,这时候没有被实例化的类在内... 查看详情

继承,修饰符(代码片段)

static静态修饰符  一)、static可用来修饰    1、成员变量:静态变量,可以直接通过类名访问    2、成员方法:静态方法,可以直接通过类名访问    3、代码块:静态代码,当java虚拟机加载类时,就会执行代... 查看详情

static静态变量

static静态变量static关键字来定义静态方法和属性。static也可用于定义静态变量声明类属性或方法为静态,就可以不实例化类而直接访问。静态属性不能通过一个类已实例化的对象来访问(但静态方法可以)。为了兼容PHP4,如果... 查看详情

static静态变量,静态方法

 Java 之静态变量引入一个类可以创建多个对象,每个对象都拥有自己的成员,各自互相独立。然而在某些特殊情况下,我们希望该类的所有对象共享一个成员,这个时候就可以把这个成员设置为static在Java中,被static ... 查看详情

java中的静态变量&静态方法(代码片段)

静态变量&静态方法    静态变量又叫做类变量,静态方法又被称为类方法——均被static修饰        未被static修饰的成员变量和方法分别被称为实例变量和实例方法(1)静态方法中不需要它所属类的任何实例... 查看详情

是否可以访问私有静态变量和方法?

】是否可以访问私有静态变量和方法?【英文标题】:Isitpossibletoaccessaprivatestaticvariableandmethod?【发布时间】:2021-11-2402:09:25【问题描述】:我们可以通过编写className.propertyName来访问一个类的静态属性,但是如果该属性(方法/变... 查看详情

如何从泛型类访问静态变量?

】如何从泛型类访问静态变量?【英文标题】:Howtoaccessastaticvariablefromagenericclass?【发布时间】:2017-12-2911:17:12【问题描述】:我有很多带有静态变量的类,如下所示:user.ts:exportclassUserstaticmodelKey=\'user\';//othervariablescar.ts:exportc... 查看详情

从一个文件访问另一个文件的静态变量

】从一个文件访问另一个文件的静态变量【英文标题】:Accessofstaticvariablefromonefiletoanotherfile【发布时间】:2014-09-2011:12:42【问题描述】:我最近遇到了一个问题,比如如何将在file1.c中声明为静态的变量访问到另一个file2.c?可以... 查看详情

使用变量类名 (PHP) 访问静态方法

】使用变量类名(PHP)访问静态方法【英文标题】:accessingstaticmethodsusingavariableclassname(PHP)【发布时间】:2011-06-3021:43:09【问题描述】:我正在尝试访问静态方法,但使用变量作为类名。这可能吗?我似乎对此有问题。我希望能够... 查看详情

访问私有变量的 Java 静态方法

】访问私有变量的Java静态方法【英文标题】:Javastaticmethodsaccessingprivatevariables【发布时间】:2011-07-0423:40:54【问题描述】:我的印象是私有非静态变量只能通过在变量所在的对象上调用的方法来访问,但事实并非如此。有人可... 查看详情

1.7oob静态变量静态方法

1)静态方法中可以直接调用同类中的静态成员,但不能直接调用非静态成员2)如果希望在静态方法中调用非静态变量,可以通过创建类的对象,然后通过对象来访问非静态变量。3)静态方法中不能直接调用非静态方法,需要通... 查看详情

javase7基础类中静态方法只能访问静态变量

 版本参数:jdk-7u72-windows-i586注意事项:博文内容仅供参考,不可用于其他用途。 代码classTest{ publicstaticintnum1=1; privatestaticintnum2=2; //静态方法只能访问静态变量 publicstaticvoidsayHello(){ System.out.println(num1); System 查看详情

public static void main() 访问非静态变量

】publicstaticvoidmain()访问非静态变量【英文标题】:publicstaticvoidmain()accessnonstaticvariable【发布时间】:2012-07-1608:19:00【问题描述】:据说非静态变量不能在静态方法中使用。但是publicstaticvoidmain可以。这是怎么回事?【问题讨论】... 查看详情

c#静态成员和方法的学习小结

C#静态成员和方法的学习小结数据成员:数据成员可以分静态变量、实例变量两种.静态成员:静态成员变量是和类相关联的,可以作为类中"共"有的变量(是一个共性的表现),他不依赖特定对象的存在,访问的时候通过类名加点操作... 查看详情

从数组访问非静态变量[关闭]

】从数组访问非静态变量[关闭]【英文标题】:Accessingnon-staticvariblesfromanarray[closed]【发布时间】:2018-02-2411:59:01【问题描述】:快速提问:我正在统一c#中编写,并且有一个array包含同一对象的多个实例。我想在数组的每个成员... 查看详情

static关键字解析

...tatic方法就是没有this的方法。在static方法内部不能调用非静态方法,反过来是可以的。而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法。这实际上正是static方法的主要用途。”这段话虽然只是说明了static... 查看详情