• 027class_part1


    因为有基础,我直接简单写了
    ##定义类,创建对象,调用对象方法,返回值

    class  person:
        def  speak(self,x):
        print('love',x)
        return  x + '*********'
    
    xia = person()
    s = xia.speak('theonewholoveme')
    print(s)

    ##添加属性,和Java有区别

    class  B:
        def  func(self,x = '**'):
            print(self.name,x)
    z
    = B() z.name = 'xia' z.func('21')

    ##构造方法

    def  __init__(self):
        print('123')
    
    def  __init__(self,name,age):
      print('3',name,age)

    python构造方法只有一个或者没有,和Java不同

    ###继承

     1 class  Father:
     2     def  f(self):
     3         print('father')
     4     def  smoke(self):
     5         print('f_吐烟')
     6 
     7 class  Son(Father):
     8     def  s(self):
     9         print('son')
    10     def  smoke(self):
    11         super(Son,self).smoke()  # super(当前类名,self).父类方法,第一种调用父类方法
    12         print('s_吐烟')
    13         Father.smoke(self)  # 第二种调用父类方法,推荐使用super
    14         
    15 s=Son()
    16 s.smoke()
    View Code

    #多继承
    类外部调用方法顺序

     1 class  GF:
     2     def  a1(self):
     3         print('grand.a1')
     4 
     5 class  F1:
     6     def a(self):
     7         print('F1.a')
     8 
     9 class  F2(GF):
    10     def a(self):
    11         print('F2.a')
    12 
    13 class S(F1,F2):
    14     pass
    15 
    16 son = S()
    17 son.a()         # F1.a,那个在前就调用哪个的,这里F1在前面,如果是S(F2,F1),这样就是F2.a了
    18 son.a1()        # grand.a1,从F1往上找找不到就会从右边F2这边找
    View Code

    类方法内部调用对象方法

     1 class  BaseRequest:
     2     def  __init__(self):
     3         print('BaseRequest.__init__')
     4     
     5 class  RequestHandler(BaseRequest):
     6     def  __init__(self):
     7         print('RequestHandler.__init__')
     8     def  server_forever(self):
     9         print('RequestHandler.server_forever')
    10         self.process_request()   # self还是Son创建的对象,所以还是从Minx开始找
    11 
    12 def  process_request(self):
    13     print('RequestHandler.process_request')
    14 
    15 class  Minx:
    16     def  process_request(self):
    17         print('Minx.process_request')
    18 
    19 class  Son(Minx,RequestHandler):
    20     pass
    21 
    22 o = Son()                       #RequestHandler.__init__
    23 o.server_forever()   # RequestHandler.server_forever#Minx.process_request
    View Code

    ###多态(了解)
    不过,在python里面忽略多态,支持多态,所以我就不写了

    ###类的成员之字段
    普通字段    self.***
    静态字段    直接在类里面

    class  Province:
        country = '中国'
        def __init__(self,name):
            self.name = name
    guangdong = Province('广东')
    print(Province.country)              # 中国    # 静态字段,在类里面,可以通过对象访问也可以通过类访问
    print(guangdong.name)                  # 广东    # 普通字段,在对象里面

    ###类的方法
    普通方法 1、对象调用;

    2、通过类调用普通方法(不使用)

    class  P:
        def  f(self):
            print('ffff')
    obj = P()
    P.f(obj)   # 这样调用,蛮无聊的。不会使用

    静态方法:加@staticmethod

    class  P:
        @staticmethod
        def  sta():
            print('statics')
    P.sta()

    类方法:和静态方法差不多,参数问题,这个不重要(不会使用)

    @classmethod
    def  classmd(cls):
        print(cls)
    
    P.classmd()

    #类成员之属性

    class  P:
        @property
        def  per(self):
            print('property')
            return  1 
            
        @per.setter
        def  per(self,val):
            print(val)
        
        @per.deleter
        def  per(self):
            print('deleter')
        
    x = P()            
    r = x.per             # property, 有类似x.per的就执行  @property下函数 ,需要有返回值
    print(r)             #  1
    x.per = 123        # 自动显示123     有类似 x.per = *** 的就执行 @per.setter 下函数
    del   x.per          # 显示deleter    有类似del  x.per 的就执行@per.deleter 下函数

    property实现的功能相当于Java的get,.setter相当于实现set,deleter相当于delete

    eg:利用属性实现分页

     1 #__author:_nbloser
     2 #date:2018/1/19
     3 
     4 class  Pergination:
     5     def  __init__(self,current_page):
     6         try:
     7             p = int(current_page)
     8         except:
     9             p = 1
    10         self.page = p
    11 
    12     @property
    13     def  start(self):
    14         val = (self.page-1)*10
    15         return  val
    16 
    17     @property
    18     def  end(self):
    19         val = self.page*10
    20         return  val
    21 
    22 li = []
    23 for  i  in  range(1000):
    24     li.append(i)
    25 
    26 while  True:
    27     p = input('页码:')
    28     obj = Pergination(p)
    29 
    30 print(li[obj.start:obj.end])
    View Code

     #######################################
    经理和员工差异(用来熟悉知识)

    class Employee:
        @property
        def name(self):
            return self.__pname
    
        @name.setter
        def name(self,val):
            self.__pname = val
    employee.py
    import employee
    class Manager(employee.Employee):
        @property
        def bonus(self):
            return self.__bonus
    
        @bonus.setter
        def bonus(self,val):
            self.__bonus = val
    manager.py
    from employee import Employee
    from manager import Manager
    
    if __name__ == '__main__':
        emp = Employee()
        man = Manager()
        emp.name = 'xxxx'
        man.name = 'iiii'
        man.bonus = 10000
        print(emp.name,man.name,man.bonus)
    run.py





  • 相关阅读:
    实战-rsync+inotify打造文件实时备份
    实战-Mysql5.6.36脚本编译安装及初始化
    实战-CentOS6.8配置nfs服务
    CentOS7操作系统初始化
    docker搭建 SonarQube代码质量管理平台
    ubuntu 教程
    前端图表库
    WebSSH2安装过程可实现WEB可视化管理SSH工具
    devops 自动化平台网址
    AIops 智能运维平台
  • 原文地址:https://www.cnblogs.com/-nbloser/p/8318474.html
Copyright © 2020-2023  润新知