• Python——面向对象


    一、创建类

    语法格式:

    class 类名:
        pass

    创建方法:

    1 构造方法

    1 class Person:
    2 
    3     def __init__(self, name,age):
    4 
    5         #构造方法,构造方法的特性, 类名() 自动执行构造方法
    6 
    7         self.n = name
    8         self.a = age

     执行构造方法:

    1 obj = Person('李欢', 18)

    2 普通方法:

    1 class Person:
    2 
    3     def show(self):
    4         pass

    执行普通方法:

    1 obj = Person()
    2 obj.show()

    二、封装

    self代指obj,指调用方法的调用者

    1 class Bar:
    2         def __init__(self, n,a):
    3             self.name = n
    4             self.age = a
    5             self.xue = 'o'
    6             
    7 obj1 = Bar('alex', 123)
    8     
    9 obj2 = Bar('eric', 456)

    三、继承

    继承格式:

    1 class 父类:    #基类
    2   pass
    3             
    4 class 子类(父类):  #派生类
    5   pass

    重写父类方法后,希望执行父类方法和重写后的方法。

    方法一: super(子类, self).父类中的方法(...)
    方法二: 父类名.父类中的方法(self,...)
     1 class f:
     2     def eat(self):
     3         print('Eating')
     4 
     5     def sleep(self):
     6         print('f is sleeping')
     7 
     8 class s(f):   #在括号中加入要继承的父类
     9     def sleep(self):    #重写父类方法
    10         super(s,self).sleep()   #方法一
    11         print('s is sleeping')
    12         f.sleep(self)           #方法二
    13 
    14 obj = s()
    15 obj.sleep()
    16 obj.eat()

    支持多继承

    多继承特点:

    a. 左侧优先
    b. 一条道走到黑
    c. 同一个根时,根最后执行
     1 class BaseReuqest:
     2 
     3     def __init__(self):
     4         print('BaseReuqest.init')
     5 
     6 
     7 class RequestHandler(BaseReuqest):
     8     def __init__(self):
     9         print('RequestHandler.init')
    10         BaseReuqest.__init__(self)
    11 
    12     def serve_forever(self):
    13         # self,是obj
    14         print('RequestHandler.serve_forever')
    15         self.process_request()
    16 
    17     def process_request(self):
    18         print('RequestHandler.process_request')
    19 
    20 class Minx:
    21 
    22     def process_request(self):
    23         print('minx.process_request')
    24 
    25 
    26 class Son(Minx, RequestHandler): #按照从左到右,一条线走到底,如果有相同的根,则根最后执行
    27     pass
    28 
    29 
    30 obj = Son() # init
    31 obj.serve_forever()

    obj = Son进行实例化时,先自动执行init方法,Son类中没有init,则在第一个父类中找init方法,Minx中没有init,去第二个父类中找init方法,以此执行完init方法之后,再去调用server_forever()普通方法。

    四、类成员

    字段

    • 静态字段

      静态字段保存在类,可以通过对象访问,也可以通过类访问。

    • 普通字段

      普通字段保存在对象中,只能通过对象访问。

    例:

    1 class Province:
    2     country = 'China'       #静态字段
    3     def __init__(self,name):
    4         self.name = name        #普通字段
    5 
    6 obj = Province('beijing')
    7 print(obj.name)
    8 print(Province.country)

    方法

    • 普通方法

      普通方法保存在类中,由对象来调用。self表示对象

    • 静态方法

      静态方法保存在类中,由类直接调用

    • 类方法

      类方法保存在类中,由类直接调用,cls代指当前类

    例:

     1 class foo:
     2 
     3     def bar(self):          #普通方法,self是对象
     4         print('ok')
     5 
     6     @staticmethod           #静态方法
     7     def sta():
     8         print('123')
     9 
    10     @staticmethod           #静态方法
    11     def stat(a,b):
    12         print(a,b)
    13 
    14     @classmethod            #类方法
    15     def aaa(cls):      #cls是类名
    16         print('class method')
    17 
    18 obj = foo()
    19 obj.bar()
    20 foo.sta()
    21 foo.stat(1,2)
    22 foo.aaa()

    不伦不类——属性

    通过加装饰器,以另一种形式访问对应的方法。

     1 class foo:
     2     @property    #用于执行obj.bar
     3     def bar(self):
     4         print('1213')
     5         return 666
     6 
     7     @bar.setter    #用于执行obj.bar = 123
     8     def bar(self,val):
     9         print(val)
    10 
    11     @bar.deleter    #通过del obj.bar可以定位并访问下面的方法
    12     def bar(self):
    13         print(999)
    14 
    15 obj = foo()
    16 obj.bar
    17 obj.bar = 123
    18 del obj.bar

    实例:

    实现分页

     1 class Pagenation:
     2 
     3     def __init__(self,current_page):
     4 
     5         try:
     6             p = int(current_page)
     7         except Exception as e:
     8             p = 1
     9 
    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(5000):
    24     li.append(i)
    25 
    26 while True:
    27     page = input('>>>')
    28     obj = Pagenation(page)
    29     # print(li[obj.start() : obj.end()])
    30     print(li[obj.start:obj.end])    #在方法前加装饰器后,可以直接用 对象名.方法名 访问方法。
  • 相关阅读:
    Unity在协程内部停止协程自身后代码执行问题
    unity如何停止不用字符串方式开启协程的方法
    解决导入protobuf源代码Unity报错的问题
    FastCGI模式编译安装LAMP+Xcache
    Apache配置防盗链
    Apache配置日志切割
    Apache配置参数的优化
    Apache三种工作模式详解
    隐藏Nginx、Apache、PHP的版本号
    配置Apache控制浏览器端的缓存的有效期
  • 原文地址:https://www.cnblogs.com/pyramid1001/p/5895631.html
Copyright © 2020-2023  润新知