Maison >développement back-end >Tutoriel Python >Résumé des connaissances orientées objet Python
Encapsulation
1. Pourquoi l'encapsulation ?
L'encapsulation consiste à masquer les détails d'implémentation spécifiques des attributs et des méthodes de données, et à fournir uniquement une interface. L'encapsulation n'a pas besoin de se soucier de la façon dont l'objet est construit
2. L'encapsulation comprend l'encapsulation des données et l'encapsulation des fonctions. L'encapsulation des données vise à protéger la confidentialité, et l'encapsulation des fonctions consiste à isoler la complexité
3. L'encapsulation des données consiste à ajouter un __
class People:def __init__(self,name,age,salary): self.name=name self.age=age self.__salary=salary p=People('zhang',19,100000)print(p.name)#zhangprint(p.age)#19print(p.__salary)#AttributeError: 'People' object has no attribute '__salary'
devant l'attribut Hé, une erreur a été signalée. Ouvrons l'espace de noms de l'objet et voyons ce qui s'est passé <.>
print(p.__dict__)#{'name': 'zhang', 'age': 19, '_People__salary': 100000}
print(p._People__salary)#100000
class A:def foo(self):print('from A foo') self.bar()def bar(self):print('from A bar')class B(A):def bar(self):print('from B bar') b=B() b.foo() #from A foo.
#from B bar 别想多了,调用函数时别看定义位置,要看调用位置
class A:def foo(self):print('from A foo') self.__bar()def __bar(self):print('from A bar')class B(A):def __bar(self):print('from B bar') b=B() b.foo() #from A foo#from A bar 有没有感受到编程的享受
class People:def __init__(self,name,age,height,weight,hobby): self.__name=name self.__age=age self.__height=height self.__weight=weight self._hobby=hobbydef tell_info(self):print('''name:%s age:%s height:%s weeight:%s'''%(self.__name,self.__age, self.__height,self.__weight)) p=People('zhang',18,1.90,75,'read') p.tell_info()
def tell_name(self):print(self.__name)#修改名字def set_name(self,new):if not isinstance(new,str):raise TypeError('名字必须是字符串类型') self.__name=new
class People:def __init__(self,name,age,height,weight,hobby): self.__name=name self.__age=age self.__height=height self.__weight=weight self._hobby=hobby @propertydef name(self):return self.__namep=People('zhang',18,1.90,75,'read')print(p.name)#zhang
@propertydef name(self):return self.__name#name已经被property修饰过,就有setter和deleter @name.setterdef name(self,new):if not isinstance(new,str):raise TypeError('名字必须是字符串类型') self.__name=new @name.deleterdef name(self):del self.__namep = People('zhang', 18, 1.90, 75, 'read')print(p.name)#zhangp.name='can' #修改print(p.name)#candel p.name #删除print(p.name)#AttributeError: 'People' object has no attribute '_People__name'
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!