Kapselung
1. Warum Kapselung?
Bei der Kapselung werden die spezifischen Implementierungsdetails von Datenattributen und -methoden ausgeblendet und nur eine Schnittstelle bereitgestellt. Die Kapselung muss sich nicht darum kümmern, wie das Objekt aufgebaut ist
2. Die Kapselung umfasst die Datenkapselung und die Funktionskapselung. Die Datenkapselung dient dem Schutz der Privatsphäre und die Funktionskapselung dient der Isolierung der Komplexität
3. Die Kapselung der Daten besteht darin, vor dem Attribut ein __
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'
hinzuzufügen. Hey, es wurde ein Fehler gemeldet und wir sehen, was passiert ist 🎜>
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'
Das obige ist der detaillierte Inhalt vonZusammenfassung des objektorientierten Python-Wissens. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!