[toc
一:封裝
1:什麼是封裝?
封裝是類的三大特性,封裝就是把功能和資料整合在一起?
2:為什麼要有封裝?
以為封裝能讓**整合度更高
3:如何使用封裝?
直接定義使用即可
在封裝的基礎上,我們可以將裝到物件或者類中的屬性隱藏起來
1:在定義類或者初始化物件時,在屬性前加__,就會將該屬性隱藏起來,但是該隱藏其實只是一種變形,_類名__屬性名,並沒有真的隱藏起來
2:該變形操作是在類定義階段掃瞄書法時發生的變形,類定義之後新增的__開頭的屬性不會發生變形
3:該隱藏對內不對外
4:在繼承中,父類如果不想讓子類覆蓋自己的方法,可以將方法定義為私有屬性
class student:
__school = '日本校區'
def __init__(self,name,age,gender):
self.__name = name
self.age = age
self.gender = gender
def __choose(self):
print(f"正在選課!")
stu = student('alen',18,'female')
stu.__name = 111 # 新建立了乙個屬性
print(stu.__dict__)
print(stu.__name)
print(stu.__dict__)
print(stu._student__name) # 'alen'
print(stu.__dict__)
print(student._student_school)
print(stu._student__school)
把資料屬性隱藏起來的意義是:在類內開放介面,讓外界使用介面來操作屬性值,我們可以在介面之上附加任意的邏輯,來嚴格控制外界對屬性的操作
把功能屬性隱藏起來
class student:
__school = 'oldbyo' #
def __init__(self,name,age,gender):
self.__name = name
self.__age = age
self.gender = gender
def __choose(self):
print(f"正在選課")
def get_name(self):
print(self.__name) # print(self._student__name)
def get_age(self):
print(self.__age)
def set_age(self,age):
if type(age) is not int:
print("年齡必須是整型,眼瞎")
return
self.__age = age
def del_age(self):
del self.__age
示列2class people:
def __init__(self,name,height,weight):
self.name = name
self.height = height
self.weight = weight
def bmi(self):
return self.weight / (self.height **2)
p = people('egon',1.81,70)
p.height = 1.84
p.bmi()
class people:
def __init__(self,name,height,weight):
self.name = name
self.height = height
self.weight = weight
@property
def bmi(self):
return self.weight / (self.height **2)
p = people('egon',1.81,70)
p.height = 1.84
p.bmi
示列3class student:
__school = '東京校區'
def __init__(self,name,age,gender):
self.__name = name
self.age = age
self.gender = gender
def get_name(self):
print("訪問介面")
return self.__name
def set_name(self,name):
print('修改操作')
self.__name = name
def del_name(self):
del self.__name
def get_age(self):
retrun self.__age
def set_age(self,age):
if type(age) is not int:
print("年齡必須是整型,傻瓜")
return
def del_age(self):
print("不讓刪除")
age = property(get_age,set_age,del_age)
name = property(get_name,set_name,del_name)
s1 = student("alen",18,'female')
s1.age = 19
del s1.age
print(s1.age)
s1.name = 'egon'
del s1.name
class student:
__school = '上海校區'
def __init__(self,name,age,gender):
self.name = name
self.age = age
self.gender = gender
@property
def name(self):
print("訪問")
return self.__name
name.setter
def name(self,name):
self.__name = name
@name.deleter
def name(self):
print("刪除")
del self.__name
s1 = student('alen',18,'female')
s1.name
繫結方法:誰來呼叫就會將誰當作第乙個引數傳入
繫結給物件的方法:類中定義函式預設就是繫結給物件的方法,應該是由物件來呼叫,會把物件當作第乙個引數傳入
繫結給類的方法:在類中的函式加乙個裝飾器@classmethod,該函式就繫結給類了,應該是由類來呼叫,會把類當作第乙個引數傳入
非繫結方法:既不與類繫結也不與物件繫結,就是乙個普通函式,誰都可以來呼叫,沒有自動傳參的效果,需要在函式新增裝飾器staticmethod
示列class people:
def __init__(self,name,age):
self.name = name
self.age = age
def tell_info(self):
print(f"")
@classmethod
def foo(cls):
print(cls) # student
@staticmethod
def bar(x,y,z):
print(x,y,z)
p1 = people('egon',18)
p1.tell_info()
print(people.foo)
people.bar(1,2,3)
settings
ip = '127.0.0.1'
port = 3306
import uuid
import mysql
class mysql:
def __init__(self,ip,port):
self.mid = self.__create_id()
self.ip = ip
self.port = port
def tell_info(self):
print(f"")
@staticmethod
def __create_id():
return uuid.uuid4()
@classmethod
def from_conf(cls):
return cls(settings.ip,settings.port)
obj = mysql('10,1,2,3',3306)
obj.tell_info()
obj2 = mysql.from_conf()
obj2.tell_info()
物件導向之封裝
定義 影藏事物的屬性和實現的細節,僅對外提供公共的訪問方式 封裝的好處 1.隱藏了事物的細節 2.提高了 的復用性 3.提高了安全性 封裝的實現 使用private關鍵字進行修飾,被private修飾的成員只能在本類中使用 setter和getter 封裝需要搭配set和get方法 set 設定器 ...
物件導向之封裝
封裝之如何隱藏屬性 在變數名和方法名之前加雙下劃線 外部就訪問不到 classa x 1def init self,name self.name name def bar self print self.name a.x 外部無法訪問這其實是在類定義的時候,將變數名和函式名進行了變形,我們可以列印類...
物件導向之 封裝
封裝 就是把屬性或者方法裝起來 廣義 把屬性和方法裝起來,外面不能直接呼叫了,要通過類的名字來呼叫 狹義 把屬性和方法藏起來,外面不能呼叫,只能在內部偷偷呼叫 class user def init self,name,passwd self.usr name self.pwd passwd 私有的...