zoukankan      html  css  js  c++  java
  • 面向对象基础

    1. 第一个类
      class Circular:
          def __init__(self,radius):
              self.radius = radius
          def perimeter(self):
              print('周长:%s'%str(self.radius*3.14*2))
              return self.radius*3.14*2
          def area(self):
              print('面积:%s'%str(self.radius*self.radius*3.14))
              return self.radius*self.radius*3.14
      
      obj = Circular(30)
      obj.perimeter()
      obj.area()
    2. 类的私有字段
      # 类的私有字段、方法
      # 在字段名前加上__该字段就成为了私有字段,只能在类的内部访问。就算是派生类(子类)也无法访问 
      '''
      私有字段的实现原理,在Python解释器读到__开头的字段时,会给该字段改名,改为 ‘_类名__字段名’,
      
      所以使用_类名__字段名 这个可以在任何地方访问私有字段,但是不推荐这样访问
      
      私有方法也是同理
      
      注:在Python解释器从上到下读取类代码的时候,只要遇到私有字段都会将名字改为‘_类名__字段名’,不管是调用还是定义
      
      '''
      
      class A:
          __name = '类的私有字段'
          def __f1(self):
              print('__f1')
          def f2(self):
              self.__f1()
      class B(A):
          def fun(self):
              print(self._A__name)
              
      b1 = B()
      b1.fun()
      a1 = A()
      a1.f2()
    3. 类的私有方法
      class Parent():
          def __func(self):
              print('in Parent func Parent的私有方法')
              
          def __init__(self):
              self.__func()
              
              
      class Son(Parent):
          def __fun(self):
              print('in Son func Son的私有方法')
              
      son1 = Son()
    4. 类的私有静态属性
      class A:
          __fun = 0
          def __init__(self,age):
              self.__arg = '类的私有静态对象属性'
              self.__age = age
          def func(self):
              print(self.__arg)
              print(self.__age)
      #     def __fun(self):
      #         print(666)
      a1 = A(12)
      print(A.__dict__)
      a1.func()
    5. @property装饰器
      # 创建一个类,计算BMI指数
      '''
      @property装饰器
      property 可以让一个方法,伪装成属性使用。下面是示例
      
      '''
      class Bmi:
          def __init__(self,weight,hight,name):
              self.weight = weight
              self.hight = hight
              self.name = name
          @property
          def bmi(self):
              b = self.weight / self.hight ** 2
              if b < 18.5:
                  return '《Name:%s BMI:%s》过轻:低于:18.5'%(self.name,format(b,'0.2f'))
              
              elif b <= 23.9:
                  return '《Name:%s BMI:%s》正常:18.5~23.9之间'%(self.name,format(b,'0.2f'))
              
              elif b <= 27:
                  return '《Name:%s BMI:%s》过重:24~27之间'%(self.name,format(b,'0.2f'))
              
              elif b <= 32:
                  return '《Name:%s BMI:%s》肥胖:28~32之间'%(self.name,format(b,'0.2f'))
              
              else:
                  return '《Name:%s BMI:%s》非常肥胖:高于32'%(self.name,format(b,'0.2f'))
              
      bmi = Bmi(73,1.77,'kkk')
      print(bmi.bmi)
    6. @property 属性的修改
      # property 属性的修改
      '''
      @property装饰器
      property 可以让一个方法 伪装成属性使用。
      
      伪装属性的修改
      @需要修改的属性.setter 下面是示例
      
      注: 要使用 setter 装饰器 必须要存在@property  
      '''
      class A:
          def __init__(self,name,age):
              self.__name = name
              self.__age = age
          # 查看属性
          @property    
          def age(self):
              return self.__age
          
          # 修改属性
          @age.setter 
          def age(self,a1):      
      
              self.__age = a1 if isinstance(a1,int) else self.__age
          # 删除属性
          @age.deleter
          def age(self):
              del self.__age
          
      a1 = A('kkk',28)
      print(a1.age)
      a1.age = a1.age + 1
      print(a1.age)
      del a1.age
    7. 类方法
      # 类方法
      
      class A:
          def func(self):
              print(self)
          @classmethod    
          def func1(cls):
              # cls 就是 A 这个类
              print('传入的cls',cls)
              return cls()
          
          
      a1 = A.func1()
      a1.func()
      # 对象调用类方法,自动传入的cls也是类本身。
      a2 = A()
      a2.func1()
      '''
      类方法的使用场景
      
      1.类中 有些方法不需要对象参与
      2.对类中的静态变量进行改变,要用类方法
      3.在父类中获取,子类类空间
      
      '''
      # 在父类中获取,子类类空间
      class A:
          @classmethod
          def func(cls):
              print(cls)
      class B(A):
          pass
      B.func()
    8. 静态方法
      # 静态方法
      '''
      静态方法:没有self,cls 不用默认传入 对象和类
      '''
      class A:
          @staticmethod
          def func():
              print(666)
      A.func()
    9. 类继承C3算法
      # 类多继承c3算法
      '''
      在下面各类的关系
           H
      G(H)     F(H)
      E(G)     D(F)
      C(E)     B(D)
          A(B,C,D)
          
      查看A的寻找方法:
      1.列出 B,C,D的深度查找顺序(从左往右),然后把A的继承顺序放到最后
          得到:[B,D,F,H] [C,E,G,H] [D,F,H] [B,C,D]
          在后面,我们把列表的第0个元素,叫做头 后面的叫做尾
      
      2.我们取出第一个列表的头 也就是[B,D,F,H]中的第一个元素B,去和剩下列表的尾里面查找,是否有重复的。
          的到结果,没有重复的。
          那就把B放到一个新列表中,并且在原来所有列表中删除B
          执行完这一步之后的结果:
              [D,F,H] [C,E,G,H] [D,F,H] [C,D]
              新列表 [B,]
              
      3.然后我们用 [D,F,H] [C,E,G,H] [D,F,H] [C,D] 来继续执行 2步骤。取出头 D 查看在其他列表的尾中是否有重复的
          的到结果,有重复的。那么我们跳过第一个列表,取出第二个列表的头 C。来执行2步骤 
          得到结果,没有重复的。
          执行之后的结果:
              [D,F,H] [E,G,H] [D,F,H] [D]
              新列表 [B,C ]
      ========================== 后面都是重复前面的步骤2 ====================================== 
      
      4.然后我用继续用 [D,F,H] [E,G,H] [D,F,H] [D]来继续执行 2步骤。取出头 D 查看在其他列表的尾中是否有重复的
          的到结果,没有重复的
          执行之后的结果:
              [F,H] [E,G,H] [F,H] []
              新列表 [B,C,D ]
      5.然后我用继续用 [F,H] [E,G,H] [F,H]来继续执行 2步骤。取出头 F 查看在其他列表的尾中是否有重复的
          的到结果,没有重复的
          执行之后的结果:
              [H] [E,G,H] [H] 
              新列表 [B,C,D,F ]
              
      6.然后我用继续用 [H] [E,G,H] [H]来继续执行 2步骤。取出头 H 查看在其他列表的尾中是否有重复的
          得到结果,有重复的 那么我们跳过第一个列表,取出第二个列表的头 E。来执行2步骤 
          得到结果,没有重复的。
          执行之后的结果:
              [H] [G,H] [H] 
              新列表 [B,C,D,F,E ]
            
      7.然后我用继续用 [H] [G,H] [H] 来继续执行 2步骤。取出头 H 查看在其他列表的尾中是否有重复的
          得到结果,有重复的 那么我们跳过第一个列表,取出第二个列表的头 G。来执行2步骤 
          得到结果,没有重复的。
          执行之后的结果:
              [H] [H] [H] 
              新列表 [B,C,D,F,E,G ]
      
      8.然后我用继续用 [H] [H] [H]  来继续执行 2步骤。取出头 H 查看在其他列表的尾中是否有重复的
          得到结果,没有重复的。
          执行之后的结果:
              [] [] [] 
              新列表 [B,C,D,F,E,G,H ] 最后把A类自己加到第一个,把object加到最后
      
      9.得到最终寻找结果 [A,B,C,D,F,E,G,H,object ]
          
       '''
      class H:
          def func(self):
              print('H func')
              
      class G(H):
          def func(self):
              print('G func')
      
      class F(H):
          def func(self):
              print('F func')
              
      class E(G):
          def func(self):
              print('E func')
      
      class D(F):
          def func(self):
              print('D func')
              
      class C(E):
          def func(self):
              print('C func')
      
      class B(D):
          def func(self):
              print('B func')
      
      class A(B,C,D):
          def func(self):
              print('A func')
      
      print(A.mro())
  • 相关阅读:
    halcon7月license
    软设考试成绩查询结果
    Halcon自学笔记
    Window_Store
    Windows_Store之2048
    基于C#开发的2048
    MVC+EF+EasyUI实现CRUD
    ASP.NET MVC Model验证总结
    浙江省三级数据库考试
    基于C#的短信发送
  • 原文地址:https://www.cnblogs.com/wtil/p/11239130.html
Copyright © 2011-2022 走看看