Mémorandum de base Python Partie 3-A propos de l'orientation des objets-

Résumé de l'article

C'est un mémorandum que j'ai appris selon References, en essayant de lire Python autant que possible. J'ai résumé les points qui m'intéressaient et les points que j'ai trouvés utiles par rapport à Java. La partie 1 est ici La partie 2 est ici * Il s'agit d'un contenu assez basique. </ strong>

classe

Le concept de classe lui-même n'est pas si différent. Un exemple de définition d'une classe est donné ci-dessous.

Exemple

java


class SampleClass {
    //Traitement de classe
}

python


class SampleClass:
    #Traitement de classe

Instanciation

Instanciez une classe. La manipulation est presque la même que Java. ~~ Devrait ~~

java


SampleClass sClass = new SampleClass();

python


sClass = SampleClass()

attribut

C'est comme une variable d'instance en Java (?). Vous pouvez ajouter des attributs à l'instance.

python


sClass.attr = "Atori Byuto"
print(sClass.attr)
>>Atori Byuto

Définition de la méthode de classe

Lors de l'ajout d'un argument à une méthode de classe, ajoutez self au premier argument.

Self peut être utilisé pour manipuler l'instance elle-même

Exemple

java


class SampleClass {
    int counter = 0;
    
    int count(int a) {
        counter += a;
    }
}

python


class SampleClass:
    counter = 0;

    def count(self, a):
        self.counter += a

Méthode d'initialisation

La méthode d'initialisation utilise «init» (méthode spéciale).

Exemple

java


publiv class Human {
    String name;
    String birthday;

    public Human(String name, String birthday) {
        this.name = name;
        this.birthday = birthday;
    }
}

python


class Human:    
    def __init__(self, name = None, birthday = None):
        self.__name = name
        self.__birthday = birthday

Encapsulation

Préfixez les méthodes et les attributs avec «» (deux traits de soulignement) pour l'encapsulation. L'accès de l'extérieur peut être interdit en ajoutant «». Par convention, si vous préfixez une méthode ou un attribut avec _ (un trait de soulignement) Il a le sens de "Ne pas accéder de l'extérieur car il n'est utilisé qu'à l'intérieur de la classe" (semble-t-il).

  • Il semble que le trait de soulignement ait différentes significations lorsque je le recherche. Des liens tels que des articles lors de la recherche dans les références sont affichés.

Ajout </ strong> ~~ Il semble que getter et setter ne sont pas définis en Python. ~~ Il semble qu'il n'est pas recommandé de définir des méthodes telles que get〇〇 et set〇〇 en Python. (Comment accéder aux attributs peut être résumé séparément) Dans cet article, les getters et les setters sont définis de la manière ci-dessus pour les rendre plus faciles à comprendre par rapport à Java. Notez s'il vous plaît. Si vous ne définissez pas les traits de soulignement, les getters et les setters, je pense à apprendre séparément et à les résumer.

Exemple

java


publiv class Human {
    private String name;
    private String birthday;

    public Human(String name, String birthday) {
        this.name = name;
        this.birthday = birthday;
    }

    public getName() {
        return this.name;
    }

    public getBirthday() {
        return this.birthday;
    }

    public setName(String name) {
        this.name = name;
    }

    public setBirthday(String birthday) {
        this.birthday = birthday;
    }
}

python


class Human:
    def __init__(self, name = None, birthday = None):
        self.__name = name
        self.__birthday = birthday
    
    def getName(self):
        return self.__name

    def getBirthday(self):
        return self.__birthday

    def setName(self, name):
        self.__name = name

    def setBirthday(self, birthday):
        self.__birthday = birthday    

Héritage

Python est multi-héritable </ strong>. Pour l'héritage multiple, spécifiez les noms de classe séparés par ,.

Exemple

java


public class SuperMan extends Human {
    private String ability;

    public getAbility() {
        return this.age;
    }

    public setAbility(String ability) {
        this.ability = ability;
    }

python


class SuperMan(Human): #Pour SuperMan à héritage multiple(Human, Man)Définir comme
    def getAbility(self):
        return self.__ability

    def setAbility(self, ability = None):
        self.__ability = ability

fente

Méthodes spéciales qui peuvent limiter l'ajout d'attributs __slots__ = [nom d'attribut 1, nom d'attribut 2, ...]

Améliorez l'efficacité d'utilisation de la mémoire

python


class Profile:
    __slots__ = ['height', 'weight', 'bloodType']

    def __init__(self, bloodType = None):
        self.bloodType = bloodType

a = Profile('A')
print(a.bloodType)
>>A

#Attributs définis dans les emplacements
a.height = 170
a.weight = 60

a.constellation = 'Aries'
>>Une erreur se produit

Propriété

Fonction intégrée pour définir facilement getter et setter. Contrôlez facilement l'accès aux attributs privés. propriété (nom de la méthode de lecture, [nom de la méthode de définition])

python


class Human:
    def __init__(self, name = None):
        self.__name = name
    
    def getName(self):
        return self.__name

    def setName(self, name):
        self.__name = name

    propName = property(getName, setName)

#Lorsque vous effectuez une affectation, le setter défini dans la propriété fonctionne.
propName = 'takeshi'
#Lors de la récupération, le setter défini dans la propriété fonctionne
print(propName)
>>takeshi

Épilogue

Quand j'ai examiné les inconvénients de Python, j'ai trouvé qu'il était lent à exécuter. J'ai senti que les «slots» résumés cette fois étaient nécessaires pour améliorer les inconvénients. Je souhaite approfondir ma compréhension afin de pouvoir utiliser correctement les fonctions de type Python.

Les références

Référence </ strong> Atsushi Shibata (2016) «Minna no Python 4th Edition» SB Creative Co., Ltd.

Référence officielle </ strong> Référence officielle Python

À propos des types de données </ strong> Table de classification des types de données intégrés de Python (mutable, etc.)

À propos du trait de soulignement </ strong> Cours Python pour débutants, version 7 orientée objet encapsulée Leçon 12 Définition de classe - Introduction à la grammaire de base Python python underbar ce n'est pas ça

Recommended Posts