py 5.28

#内置函数
#@property(伪装):将一个本意是属性的方法在调用时伪装成直接调用属性(方法名)的样子来调用此函数。
# class A:
#     def __init__(self,r):
#         self.r = r
#     def area(self):
#         return self.r**2
# print(A(5).area())#变成
# class A:
#     def __init__(self,r):
#         self.r = r
#     @property
#     def area(self):
#         return self.r**2
# print(A(5).area)

#@被伪装后的方法名.setter : 可以限制给对象的属性赋值的数据类型。或是把伪装后的函数名变成可修改的,变的
#                          更像对象的属性。
# class A:
#     def __init__(self):
#         self.__name = 'zhangsan'
#     @property
#     def name(self):
#         return self.__name #把私有对象属性返回给调用者。
#     @name.setter          #name为被伪装之后
#     def name(self,new):   #必须同名函数。
#         self.__name = new #改值或其他操作。
# b =  A()
# print(b.name) #伪装后的调用。
# b.name = 'abc' #调用setter下面的函数,传入new
# print(b.name)

#@方法名.deleter
#所有借用操作系统的资源,在删除一个伪装或方法属性的变量前,一定要归还资源(f.close())
# class Open:
#     def __init__(self,path):
#         self.f = open(path,'w')
#     @property
#     def write_in(self):       #1
#         self.f.write('xieru')
#     @write_in.deleter         #2
#     def write_in(self):       #3   1/2/3的名字必须一样。
#         print('执行了删除函数')
#         self.f.close()         #先关闭文件(还回去)
#         del self.f             #再删除文件句柄
# b = Open('file.txt')
# b.write_in
# del b.write_in  #触发了 @f.deleter

#@classmethod
#用类调用。 当类中的方法用不上self这个参数时,将self变成cls(类),在外面直接用 类.方法名 调用即可。
# class A:
#     @classmethod
#     def func(cls):
#         print('这个函数不需要self')
# A.func()
#@staticmethod
#用类调用。当类中的方法即用不上cls也用不上self时。相当于把一个外埠的函数放入类中使用。
# class A:
#     @staticmethod
#     def login(name):
#         if name == 'alex':
#             print('通过')
# A.login('alex')
内置函数
#封装
#私有静态属性:__静态属性 = 'aaa'  #只能在类内部使用,外面无法获取。
# class A:
#     __name = 'wangxiaoer'                # 等同于 _A__name = 'wangxiaoer'
#     print(__name) #内部使用
# print(__name)  #无法获取
#私有对象属性。
# class A:
#     def __init__(self,length):
#         self.__length = length  #只在类内部用来计算或其它操作,一般用来外部不需要获取这个属性值的情况
#     def cal(self):
#         return self.__length*2
# print(A(5).cal())
#私有方法: def __name(self):  #1、某些方法不想让在外部被调用。比如:密码加密。
#                               2、某些方法不需要在外部调用,没有用,没有意义。比如各个数据类型的内部操作方法。
# class A:
#     def __getpwd(self):
#         print('我是私有方法')
#     def login(self):      #login是可以在外面被调用的,在外面调用登陆方法
#         self.__getpwd()   #然后执行登陆函数中的getpwd方法。(属于在内部执行)
# A().login()
# A().__getpwd() #出错
#私有方法面试题
# class Role:
#     def __init__(self):  #子类中没有找到__init__方法,往父类中找。
#         self.__func()    #第三步,找到后往下执行。寻找__func方法,实则是查找_A__func方法
#     def __func(self):    #第五步,应该执行此函数(_A__func)
#         print('我是父类中的方法')
# class Person(Role):           #第二步,找到对应类,并找__init__方法。
#     def __func(self):         #第四步,先在自己类中找__func,发现是_B__func方法,不符合。
#         print('我是子类中的方法')
# Person()  #第一步:实例化一个对象
封装
#钻石继承(广度优先)
#       A
# B(A)    C(A)
#   D(B,C)            查找顺序:D--->B-->C-->A
# class A:
#     def func(self):
#         print('in A')  #4.A
# class B(A):
#     def func(self):
#         print('in B')  #2.B
#         super().func()
# class C(A):            #3.C
#     def func(self):
#         print('in C')
#         super().func()
# class D(B,C):        #广度优先原则,B找完再找C,不直接找A
#     def func(self):
#         print('in D')  #1.D
#         super().func()
# D().func()
#第二种:(类似深度优先)
#   E      F
# B(E)   C(F)
#    D(B,C)           #查找顺序:D-->B-->E-->C-->F   (类似深度优先,以路径最短为主。)
# class E:pass
    # def func(self):
    #     print('in E')
# class F:
#     def func(self):
#         print('in F')
# class B(E):pass
#     # def func(self):
#     #     print('in B')       #首先路线为D-->B-->E
#     #     super().func()
# class C(F):
#     def func(self):
#         print('in C')        #如果B和E中都没有,则路线为D-->C-->F
#         super().func()
# class D(B,C):
#     def func(self):
#         print('in D')
#         super().func()
# D().func()
#第三种
#        A
#   E(A)   F(A)
# B(E)       C(F)
#     D(B,C)         查找顺序:D-->B-->E-->C-->F-->A  (找到E的时候不直接找A,因为还有另一条路线可以找到A)
#查看查找顺序的方法:类名.mro()
# print(D.mro())
#super()查找顺序与mro一致
#新式类:基于object的类,遵循广度优先原则。
#经典类:不基于object的类,遵循深度优先原则。
#py2中需要定义父类为object之后才能变成新式类。py3中默认最高层都是基于object的,所以全部都是新式类。
钻石继承

猜你喜欢

转载自www.cnblogs.com/liujjpeipei/p/9101940.html