Python的静态方法和类成员方法都可以被类或实例访问,两者概念不容易理清,但还是有区别的:
1)静态方法无需传入self参数,类成员方法需传入代表本类的cls参数;(参数cls代表本类)
2)从第1条,静态方法是无法访问实例变量的,而类成员方法也同样无法访问实例变量,但可以访问类变量;
3)静态方法有点像函数工具库的作用,而类成员方法则更接近类似Java面向对象概念中的静态方法。
实现静态方法和类方法的两种方式
一、在Python 2.3及之前,用staticmethod和classmethod类型对象包装实现
例子如下(注意print里的说明):
class MyClass:
val1 = 'Value 1'
def __init__(self):
self.val2 = 'Value 2'
def staticmd():
print '静态方法,无法访问val1和val2'
smd = staticmethod(staticmd)
def classmd(cls):
print '类方法,类:' + str(cls) + ',val1:' + cls.val1 + ',无法访问val2的值'
cmd = classmethod(classmd)
执行:
>>> mc = MyClass()
>>> mc.smd()
>>> mc.cmd()
>>> MyClass.smd()
>>> MyClass.cmd()
二、在Python 2.4及之后,用装饰器(decorators)实现
装饰器使用@操作符,例子如下:
class MyClass:
val1 = 'Value 1'
def __init__(self):
self.val2 = 'Value 2'
@staticmethod
def staticmd():
print '静态方法,无法访问val1和val2'
@classmethod
def classmd(cls):
print '类方法,类:' + str(cls) + ',val1:' + cls.val1 + ',无法访问val2的值'
不管是以上两种方式中的哪一种,执行情况都是一样的,以方式二执行结果为例分析如下:
执行:
>>> mc = MyClass() # 实例化
>>> mc.staticmd() # 实例调用静态方法,无法访问实例变量val1和val2
>>>
静态方法,无法访问val1和val2
>>> mc.classmd() # 实例调用类方法,注意,这里访问的是类MyClass的变量val1的值,不是实例化后mc的实例变量val1,这里容易混淆,往下看就会明白。val2一直是实例变量,所以无法访问
>>>
类方法,类:__main__.MyClass,val1:Value 1,无法访问val2的值
>>> MyClass.staticmd() # 类直接调用静态方法,结果同上面的实例调用,无论是类变量还是实例变量都无法访问
>>>
静态方法,无法访问val1和val2
>>> MyClass.classmd() # 类直接调用类方法,结果同上面的实例调用
>>>
类方法,类:__main__.MyClass,val1:Value 1,无法访问val2的值
>>> mc.val1 = 'Value changed' # 改变实例变量val1的值
>>> mc.classmd() # 实例调用类方法,注意到cls.val1的值没变,所以,这时的cls.val1是类变量val1,而非实例变量val1
>>>
类方法,类:__main__.MyClass,val1:Value 1,无法访问val2的值
>>> MyClass.classmd() # 类直接调用类方法,结果同上面的实例调用
>>>
类方法,类:__main__.MyClass,val1:Value 1,无法访问val2的值
>>> MyClass.val1 = 'Class Value changed' # 改变类变量val1的值
>>> mc.classmd() # 实例调用类方法,注意到cls.val1的值变了,所以,进一步证明了这时的cls.val1是类变量val1,而非实例变量val1
>>>
类方法,类:__main__.MyClass,val1:Class Value changed,无法访问val2的值
>>> MyClass.classmd() # 类直接调用类方法,结果同上面的实例调用
>>>
类方法,类:__main__.MyClass,val1:Class Value changed,无法访问val2的值
结论
如果上述执行过程太复杂,记住以下两点就好了:
静态方法:无法访问类属性、实例属性,相当于一个相对独立的方法,跟类其实没什么关系,换个角度来讲,其实就是放在一个类的作用域里的函数而已。
类成员方法:可以访问类属性,无法访问实例属性。上述的变量val1,在类里是类变量,在实例中又是实例变量,所以容易混淆。

ArraySinpython, en particulier Vianumpy, arecrucialinsciciencomputingfortheirefficiency andversatity.1) ils sont les opérations de data-analyse et la machineauning.2)

Vous pouvez gérer différentes versions Python en utilisant Pyenv, Venv et Anaconda. 1) Utilisez PYENV pour gérer plusieurs versions Python: installer PYENV, définir les versions globales et locales. 2) Utilisez VENV pour créer un environnement virtuel pour isoler les dépendances du projet. 3) Utilisez Anaconda pour gérer les versions Python dans votre projet de science des données. 4) Gardez le Système Python pour les tâches au niveau du système. Grâce à ces outils et stratégies, vous pouvez gérer efficacement différentes versions de Python pour assurer le bon fonctionnement du projet.

NumpyArrayShaveSeveralAdvantages OverStandardPyThonarRays: 1) TheaReMuchfasterDuetoc-bases Implementation, 2) Ils sont économisés par le therdémor

L'impact de l'homogénéité des tableaux sur les performances est double: 1) L'homogénéité permet au compilateur d'optimiser l'accès à la mémoire et d'améliorer les performances; 2) mais limite la diversité du type, ce qui peut conduire à l'inefficacité. En bref, le choix de la bonne structure de données est crucial.

Tocraftexecutablepythonscripts, suivant les autres proches: 1) addashebangline (#! / Usr / bin / leppython3) tomakethescriptexecutable.2) setpermisessionswithchmod xyour_script.py.3) organisationwithacleardocstringanduseifname == "__ __" Main __ ".

NumpyArraysarebetterFornumericalOperations andMulti-dimensionaldata, tandis que la réalisation de la réalisation

NumpyArraysareBetterForheAVYVumericalComputing, tandis que la réalisation de points contraints de réalisation.1) NumpyArraySoFerversATACTORATIONS ajusté pour les données

CTYPESALLOWSCREATINGAndMANIPulationc-styLearRaySInpython.1) UsectypeStOinterfaceWithClibraryForPerformance.2) Createc-stylearRaysFornumericalComptations.3) PassArrayStocfunction


Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Version Mac de WebStorm
Outils de développement JavaScript utiles

Dreamweaver CS6
Outils de développement Web visuel

Adaptateur de serveur SAP NetWeaver pour Eclipse
Intégrez Eclipse au serveur d'applications SAP NetWeaver.

Version crackée d'EditPlus en chinois
Petite taille, coloration syntaxique, ne prend pas en charge la fonction d'invite de code

Navigateur d'examen sécurisé
Safe Exam Browser est un environnement de navigation sécurisé permettant de passer des examens en ligne en toute sécurité. Ce logiciel transforme n'importe quel ordinateur en poste de travail sécurisé. Il contrôle l'accès à n'importe quel utilitaire et empêche les étudiants d'utiliser des ressources non autorisées.
