7.13學習日記
阿新 • • 發佈:2021-07-13
繫結方法
1.繫結給物件的
2.繫結給類的
繫結給物件
class Student():
country = 'China'
def __init__(self,name,age):
self.name1 = name
self.age = age
def tell_info(self):
print('%s-%s' % (self.name, self.age))
obj = Student('egon', 30)
obj.tell_info() #物件呼叫方法,不需要再傳引數
Student.tell_info(obj) #類呼叫方法,要傳引數
繫結給類的
import settings
class Mysql():
country = 'China'
def __init__(self,ip,port):
self.ip = ip
self.port = port
def tell_info(self):
print('%s-%s' % (self.ip, self.port))
# 類方法是繫結給類的,類來呼叫,把類名當作第一個引數傳遞 用到類名就寫裝飾器
非繫結方法
非繫結方法:不繫結給物件,也不繫結給類
# 呼叫方法引數該怎麼傳就怎麼傳
class Mysql():
def __init__(self,ip,port):
self.ip = ip
self.port = port
uuid模組
隨機字串,基本上永不重複
隱藏屬性
1、如何隱藏
# 原理
# 在類定義階段,把隱藏物件語法變形,只要改變語法還可以使用
# __country -> _People__country
# 該隱藏對外不對內
# 原理是在定義階段,掃描到呼叫隱藏物件的語句時,依舊會語法變形,所以可以直接呼叫
# 如果想訪問類中的隱藏屬性,在類中開放對外的介面,可以更好的對外部做限制
#變形操作只在類定義階段,之後的所有屬性或者方法,都不會變形
class People():
__country = 'China' # __即隱藏物件
def __init__(self,name,age):
self.name1 = name
self.age = age
def __func(self): # _People__func
print('func')
#如果外部想呼叫
def get_country(self):
return self.__country
# self._People__country
def set_country(self,v):
if type(v) is not str:
print("country必須是str型別")
return
self.__country = v
obj = People('ly', 18)
print(obj.get_country())
2、為什麼要隱藏
1:封裝資料:將資料隱藏起來這不是目的。隱藏起來然後對外提供操作該資料的介面,然後我們可以在介面附加上對該資料操作的限制,以此完成對資料屬性操作的嚴格控制。
2:封裝方法:目的是隔離複雜度
取款是功能,而這個功能有很多功能組成:插卡、密碼認證、輸入金額、列印賬單、取錢
對使用者來說,只需要知道取款這個功能即可,其餘功能我們都可以隱藏起來,很明顯這麼做
隔離了複雜度,同時也提升了安全性
補充:python3中統一了類與型別的概念
l1 = list([1,2,3])
l1.append(4) # list.append(l1,4)
peoperty裝飾器
# 將一個函式功能偽裝成一個數據屬性
例1
class People():
__country = 'China'
def __init__(self,name,age):
self.__name = name
self.age = age
面向物件的三大特徵
封裝,繼承,多型
繼承
1.什麼是繼承
繼承就是一種新建類的方式
新建的類稱為子類或者叫派生類
被繼承的類稱為父類或者叫基類
子類可以遺傳父類的屬性
2.為什麼用繼承
類解決物件與物件之間的程式碼冗餘問題
繼承解決類與類之間的程式碼冗餘的問題
3.如何使用繼承
python支援多繼承
經典類:沒有繼承object類的子子孫孫類都是經典類
新式類:繼承了object以及該類的子子孫孫類都是新式類
python2中才區分新式類和經典類
python3都是新式類
class Pareent1:
pass
class Pareent2:
pass
class Sub1(Pareent1):
pass
class Sub2(Pareent1,Pareent2):
pass
print(Sub1.__base__)
print(Sub2.__bases__)
繼承的案例
class people()
schOOl = "SH"
def __init__(self, name, age, gender):
self.name = name
self.age = age
self.gender = gender
class Student(people):
#遞迴
def __init__(self, name, age, gender, course = None):
if course is None:
self.course = []
#self.__init__()
People.__init__(self, name, age, gender)
def choose_course(self,course):
self.course.append(course)
print('%s 選課成功 %s' % (self.name, self.courses))
class Teacher(people):
def __init__(self, level):
People.__init__(self, name, age, gender)
self.level = level
def score(self, stu_obj, num):
stu_obj.num = num
print('%s老師給%s打了%s分' % (self, name, stu_obj, num))
stu1 = Student('tom', 19, 'male')
tea1 = Teacher('tom', 19, 'male')
子類如何使用父類的屬性
方式1:指名道姓的使用父類,跟繼承沒有關係
方式2:嚴格以來繼承 super()