python成员函数如何调用静态函数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python成员函数如何调用静态函数相关的知识,希望对你有一定的参考价值。

两个方法:
1.Python中静态方法的作用就是保证方法里面所使用的属性和值都是静态不变的,使用静态方法一般都不会定义参数,因为静态方法只能够使用静态属性。python内定义静态方法的方式为在定义函数的代码前加上一个@staticmethod这样的标识符。

2.一般的类方法在定义之后需要实例化这个类才能够通过类对象点方法的形式去调用它,但是静态方法可以直接通过类名去调用。因为为静态方法就相当于是一个暴露在外部的自定义函数一样,只需要使用类名找到它就可以使用了。同时静态方法也能够去用实例化之后的类对象对调用。
参考技术A 在Python2.4之后,主要使用装饰器来实现静态方法和类方法。

装饰器使用@操作符,例子如下:

class Example:

val1 = "Value 1"

def __init__(self):

self.val2 = "Value 2"

@staticmethod

def staticmd():

print("静态方法,无法访问Value1和Value2")

@classmethod

def classmd(cls):

print('类方法,类:'+str(cls)+",val1:"+cls.val1+",无法访问val2的值")

example = Example()

example.staticmd() #实例调用静态方法,无法访问实例变量val1和val2

example.classmd() #实例调用类方法,输出结果:类方法,类:,val1:Value 1,无法访问val2的值

Example.classmd() #类调用类方法,输出结果:类方法,类:,val1:Value 1,无法访问val2的值

example.val1 = "The instance value1 changed"

example.classmd() #类调用类方法,输出结果:类方法,类:,val1:Value 1,无法访问val2的值

Example.val1 = "The class value2 changed"

example.classmd() #类调用类方法,输出结果:类方法,类:,val1:The class value2 changed,无法访问val2的值

Example.classmd() #类调用类方法,输出结果:类方法,类:,val1:The class value2 changed,无法访问val2的值
参考技术B 要在类中使用静态方法,需在类成员函数前面加上@staticmethod标记符,以表示下面的成员函数是静态函数。

MFC中多线程中静态函数调用成员函数的问题

刚学多线程,想实现一个很简单的例子,就是建立一个基于对话框的工程,然后在工程中添加一个按钮和编辑框,我想使用多线程,在点击按钮的时候,主线程会将一句话显示到编辑框中,新创建的线程则弹出一个消息框,显示子线程也运行了。我是用了CreateThread,其第三个参数申明为静态的,而不是全局的,然后我该如何申明CXXXDlg这个类的一个对象,调用messagebox?

参考技术A 做个转换,定义两个相个函数:static DWORD WINAPI FuncA(LPVOID p)和DWORD FuncB()

DWORD CXXXDlg::FuncA(LPVOID p)

CXXXDlg* pPara=(CXXXDlg*)p;
return pPara->FuncB();

//真正的线程函数
DWORD CXXXDlg::FuncB()

AfxMessageBox(_T(""));
return 0;


CreateThread(NULL,0,FuncA,this,0,NULL);

以上是关于python成员函数如何调用静态函数的主要内容,如果未能解决你的问题,请参考以下文章

Python中函数的静态成员? [复制]

MFC中多线程中静态函数调用成员函数的问题

C++ 非静态成员函数的非法调用

如何从静态成员函数调用指向成员函数的指针?

MFC GetEditCtrl 报错非静态成员函数的非法调用

MFC中静态成员函数调用其他类的非静态变量