zoukankan      html  css  js  c++  java
  • 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的,所以全部都是新式类。
    钻石继承
  • 相关阅读:
    sql查询语句
    java网络编程实现两端聊天
    Thread和Runnable的子类调用
    接口和抽象类
    ObjectOutputStream和ObjectInputStream的简单使用
    HashMap遍历和使用
    InputStreamReader读取文件出现乱码
    Neural Network
    Logistic Regression 逻辑回归
    Linear Regression 线性回归
  • 原文地址:https://www.cnblogs.com/liujjpeipei/p/9101940.html
Copyright © 2011-2022 走看看