1. abc模組 ,不要以abc為模組名稱
class demo(object):
def __init__(self, li):
self.li = li
def __len__(self):
return len(self.li)
l = ['c', '李雲', '九折']
d = demo(l)
print(d) # <__main__.demo object at>
print(len(d)) # 會觸發__len__ 返回 3
如何判斷demo中是否含有 __len__魔法方法
print(hasattr(d,'__len__')) # 判斷d的內部是否含有__len__ 返回為bool
2.第一種方法實現:子類重寫父類的方法,
class cachebase(object):
def dele(self):
raise notimplementederror
def crea(self):
raise notimplementederror
class redisbase(cachebase):
1. 子類 如果不重寫 父類的方法,訪問時,就會報錯
def crea(self):
print('hahah')
r = redisbase()
主動丟擲異常:呼叫時才會檢測
r.crea()
r.dele()
r.crea()
3.第二種方法實現:子類重寫父類的方法,
import abc
# 注意:不直接繼承object 而是繼承abc.abcmeta
class cachebase(metaclass=abc.abcmeta):
@abc.abstractmethod
def dele(self):
pass
@abc.abstractmethod
def crea(self):
pass
class redisbase(cachebase):
def dele(self):
pass
def crea(self):
pass
# r = redisbase()
# r.crea()
# r.dele()
# 抽象基類:例項化的時候檢測
# 主動丟擲異常:呼叫時才會檢測
4.type 和isinstance()的區別
a = 1
b = '23'
print(isinstance(b,(int,str))) # 返回bool型別 ()元組型別----or運算
print(type(a)) #
class father(object):
pass
class son(father):
pass
ls = son()
# print(isinstance(ls, son))
# print(isinstance(ls, father)) # true 繼承
# print(type(ls) is son) # 判斷是否是乙個記憶體位址
# print(type(ls) is father) # false 不考慮繼承關係
# print(f'son_id:, father_id:')
# is 是否引用同乙個物件 即id是否相等
# == 判斷值是否相等
# 當物件有自己的例項屬性的時候,就直接輸出自己的屬性
# 當物件沒有該屬性屬性時候,才會去類物件中找
5.# 自省機制:查詢物件的內部結構
class person(object):
name = 'haha'
class student(person):
def __init__(self, school_name):
self.school_name = school_name
hty = student('logic_edc')
# print(hty.__dict__) # 當前物件的屬性
# print(dir(hty)) # 考慮到繼承的成員 返回型別是列表
# ['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'name', 'school_name']
6. 重寫父類的方法
class person(object):
def __init__(self,name,age,weight):
self.name = name
self.age = age
self.weight = weight
def speak(self):
print(f"說:我歲")
class student(person):
def __init__(self,name,age,weight,grade):
# 呼叫父類的初始化方法
# super().__init__(name,age,weight)
person.__init__(self,name, age, weight)
self.grade = grade
def speak(self):
print(f"說:我歲,我在年級")
# hz = student('小明',20,120,2)
# hz.speak()
7.多繼承
class a(object):
def __init__(self):
print('a')
class c(a):
def __init__(self):
print('c')
super().__init__()
class b(a):
def __init__(self):
print('b')
super().__init__()
class d(b,c):
def __init__(self):
print('d')
super().__init__()
if __name__ == '__main__':
d = d()
print(d.__mro__)
持久化物件狀態和一級快取
transient 瞬時態 臨時態,自由態 不存在持久化標識oid,尚未與hibernate session 關聯物件,被認為處於瞬時態,失去引用將被jvm oid就是物件中與資料庫主鍵對映屬性,例如customer類 id屬性 detached脫管態 離線態,游離態 存在持久化標識oid,但沒有與...
Hibernate 一級快取
1.session級別的快取,同session繫結,生命週期和session相同,當session銷毀,它也清除。管理以及快取的方法有clear evict clear清除session快取,evict將某個物件清除快取,相當於成為游離態detached。2.是實體級別的快取,只有在查詢物件級別的時...
Hibernate 一級快取
1.快取 hibernate中也存在快取.hibernate中存在的快取也是用來提高效率.2.hibernate中存在兩種快取 1 執行緒級別的快取.session快取 2 程序級別的快取.hibernate 二級快取 3.session快取 就是session物件中存在的快取.快取中存在的是 持久...