python一級物件 python高階類與物件深度

2021-10-13 09:26:51 字數 3460 閱讀 3720

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物件中存在的快取.快取中存在的是 持久...