Bien se connaître les membres de données Python et méthodes membres

Tout d'abord, les membres de données (attributs)

membre de données peut être divisé en deux catégories: les données appartenant aux membres de données d'objets et membre de la classe.

  • Appartenant aux éléments de données d'objets typiquement __init __ () définies dans le procédé de configuration, bien sûr, être défini également dans d' autres membres du processus, lors de la définition et l' accès aux éléments de données dans l'exemple de la méthode de soi comme un préfixe, les différents objets de la même classe (Exemple ) en même temps et les éléments de données;
  • Appartenant aux membres des données de classe sont partagées par tous les objets de cette classe, ne pas appartenir à un objet quelconque, au moment de définir les éléments de données de cette classe ne définit pas un membre de la méthode générale.

En second lieu, la méthode membre

méthodes membres de la classe Python peuvent être divisés en méthodes publiques, des méthodes privées, les méthodes statiques, les méthodes de classe ces types.

  • Méthodes publiques, méthodes privées se réfèrent généralement à une méthode d'instance appartient à l'objet, le nom des méthodes privées dans deux underscores « __ » a commencé, et méthode abstraite est généralement définie dans une classe abstraite et classe dérivée doit redéfinir les exigences. Chaque objet a ses propres méthodes de méthodes publiques et privées dans ces deux types de méthodes peuvent être accessibles par les membres appartiennent à des classes et des objets.

  • Méthodes publiques invoquées par le nom d' objet direct « nom d'objet. Méthode publique (<arguments>) » méthode privée ne peut pas appeler directement le nom de l' objet, peut être appelé que par la méthode d' auto préfixe ou dans d' autres exemples par une forme spéciale externe appeler.

  • Tous les exemples du procédé doivent avoir au moins une dite auto paramètre et doit être le premier paramètre de processus (s'il y a des mots de paramètres multiples), le paramètre d'auto représente l'objet actuel.

  • Besoin d'être auto préfixé aux membres de l' instance d'accès à une méthode d'instance, mais à l' extérieur par nom de l' objet n'a pas besoin de passer cet argument lorsque vous appelez les méthodes d'objet.

  • Si l'extérieur par le nom de classe méthodes publiques appartenant à l'invocation de l' objet, la nécessité d'une méthode explicite du paramètre auto passer un nom d'objet, qui est utilisé pour spécifier explicitement les membres à accéder à l'objet.

  • Les méthodes statiques et les méthodes de classe sont disponibles sur le nom de la classe et le nom de l' objet à appeler, mais ne peuvent pas accéder aux membres appartenant à l'objet directement, peut accéder uniquement aux membres de la classe.

  • méthodes et méthodes statiques ne pas appartenir à une instance de classe, non lié à une instance, bien sûr, ne dépend pas de tout état de l'instance, elle peut être réduite par rapport à l'exemple de la méthode beaucoup de frais généraux.

  • Procédé classe généralement abrégé cls en tant que méthodes de classe de la classe représentée par le premier paramètre lui - même, lors de l' appel de la méthode ne nécessite pas les valeurs de classe pour le passage de paramètres, des méthodes statiques ne peuvent pas recevoir de paramètres.

>>> class Root:
    __total = 0
    def __init__(self, v):    #构造方法
        self.__value = v
        Root.__total += 1

    def show(self):           #普通实例方法
        print('self.__value:', self.__value)
        print('Root.__total:', Root.__total)

    @classmethod              #修饰器,声明类方法
    def classShowTotal(cls):  #类方法
        print(cls.__total)

    @staticmethod             #修饰器,声明静态方法
    def staticShowTotal():    #静态方法
        print(Root.__total)
        
>>> r = Root(3)
>>> r.classShowTotal()              #通过对象来调用类方法
1
>>> r.staticShowTotal()             #通过对象来调用静态方法
1
>>> r.show()
self.__value: 3
Root.__total: 1
>>> rr = Root(5)
>>> Root.classShowTotal()           #通过类名调用类方法
2
>>> Root.staticShowTotal()          #通过类名调用静态方法
2

>>> Root.show()    #试图通过类名直接调用实例方法,失败
TypeError: unbound method show() must be called with Root instance as first argument (got nothing instead)
>>> Root.show(r)   #但是可以通过这种方法来调用方法并访问实例成员
self.__value: 3
Root.__total: 2
>>> Root.show(rr)  #通过类名调用实例方法时为self参数显式传递对象名
self.__value: 5
Root.__total: 2

Troisièmement, l'attribut de méthode

  • Utilisez la méthode de décoration décorateur @porperty, la fonction peut programme « comme un » accès à la propriété, offrant ainsi un accès plus convivial.

attribut lecture seule:

>>> class Test:
	    def __init__(self, value):
		self.__value = value

	    @property
	    def value(self):               #只读,无法修改和删除
		return self.__value
>>> t = Test(3)
>>> t.value
3
>>> t.value = 5                        #只读属性不允许修改值
AttributeError: can't set attribute
>>> t.v=5                              #动态增加新成员
>>> t.v
5
>>> del t.v                            #动态删除成员
>>> del t.value                        #试图删除对象属性,失败
AttributeError: can't delete attribute
>>> t.value
3

Lisible, propriété inscriptible:

>>> class Test:
    def __init__(self, value):
        self.__value = value	

    def __get(self):
        return self.__value

    def __set(self, v):
        self.__value = v
    value = property(__get, __set)

    def show(self):
        print(self.__value)
>>> t = Test(3)
>>> t.value      #允许读取属性值
3
>>> t.value = 5  #允许修改属性值
>>> t.value
5
>>> t.show()     #属性对应的私有变量也得到了相应的修改
5
>>> del t.value  #试图删除属性,失败
AttributeError: can't delete attribute

Lire, modifier, propriétés de suppression:

>>> class Test:
    def __init__(self, value):
        self.__value = value

    def __get(self):
        return self.__value

    def __set(self, v):
        self.__value = v

    def __del(self):
        del self.__value

    value = property(__get, __set, __del)

    def show(self):
        print(self.__value)
>>> t = Test(3)
>>> t.show()
3
>>> t.value
3
>>> t.value = 5
>>> t.show()
5
>>> t.value
5
>>> del t.value            #删除属性
>>> t.value                #对应的私有数据成员已删除
AttributeError: 'Test' object has no attribute '_Test__value'
>>> t.show()
AttributeError: 'Test' object has no attribute '_Test__value'
>>> t.value = 1            #为对象动态增加属性和对应的私有数据成员
>>> t.show()
1
>>> t.value
1
Publié 115 articles originaux · louange 445 won · vues + 50000

Je suppose que tu aimes

Origine blog.csdn.net/zag666/article/details/105209782
conseillé
Classement