zoukankan      html  css  js  c++  java
  • day21

    day 21 笔记

    1.内容回顾

    def login():
       pass

    login()
    class Account:
       
       def login(self):
           pass
       
    obj = Acount()
    obj.login()

    1.谈谈你了解的面向对象

    从面向对象的三大特性说起 封装 继承 多态

    2.类和对象是什么关系

    对象是类的一个实例

    class Foo:
    def __init__(self,name):
           self.name = name
    def run(self):
           pass
       
       
    obj1 = Foo('ale')
    obj2 = Foo('eric')

    3. self是什么

    # self就是一个形式参数,对象调用方法时,python内部会将该对象传给这个参数。
    class Foo:
    def run(self,num):
           pass

    obj = Foo()
    obj.run(5)

    4.类成员 和 对象成员 以及他们的关系

    class Foo:
       name = 'alex'
       def run(self):
    pass
       
    obj = Foo()

    5.类/方法/对象 都可以当作变量或嵌套到其他类型中

    class Foo:
       def run(self):
           pass


    v = [Foo,Foo]
    v = [Foo(),Foo()]
    obj = Foo()
    v = [obj.run,obj.run,obj.run]
    class School(object):
       def __init__(self,title):
           self.title = title
           
    class Course(object):
       def __init__(self,name,school_object):
           self.name = name
           self.school = school_object
           
    class Classes(object):
       def __init__(self,cname,course_object):
           self.cname = cname
           self.course = course_object
           
    s1 = School('北京')

    c1 = Course('Python',s1)
    c2 = Course('Go',s1)

    cl1 = Classes('全栈1期',c1)
    class School(object):
       def __init__(self,title):
           self.title = title
    def rename(self):
           pass

    class Course(object):
       def __init__(self,name,school_object):
           self.name = name
           self.school = school_object
    def reset_price(self):
           pass
    class Classes(object):
       def __init__(self,cname,course_object):
           self.cname = cname
           self.course = course_object
    def sk(self):
           pass
    s1 = School('北京')

    c1 = Course('Python',s1)
    c2 = Course('Go',s1)

    cl1 = Classes('全栈1期',c1)

    2.嵌套

    • 函数:参数可以是任意类型。

    • 字典:对象和类都可以做字典的key和value

    • 继承的查找关系

    class StarkConfig(object):
       pass

    class AdminSite(object):
       def __init__(self):
           self.data_list = []
           
       def register(self,arg):
           self.data_list.append(arg)
           
    site = AdminSite()

    obj = StarkConfig()
    site.register(obj)
    class StarkConfig(object):
       def __init__(self,name,age):
           self.name = name
           self.age = age

    class AdminSite(object):
       def __init__(self):
           self.data_list = []
           self.sk = None

       def set_sk(self,arg):
           self.sk = arg
           
           
    site = AdminSite() # data_list = [] sk = StarkConfig
    site.set_sk(StarkConfig)
    class StackConfig(object):
       pass

    class Foo(object):
       pass

    class Base(object):
       pass

    class AdminSite(object):
       def __init__(self):
           self._register = {}

       def registry(self,key,arg):
           self._register[key] = arg

    site = AdminSite()
    site.registry(1,StackConfig)
    site.registry(2,StackConfig)
    site.registry(3,StackConfig)
    site.registry(4,Foo)
    site.registry(5,Base)

    for k,v in site._register.items():
       print(k,v() )
    class StackConfig(object):
       pass

    class UserConfig(StackConfig):
       pass


    class AdminSite(object):
       def __init__(self):
           self._register = {}

       def registry(self,key,arg=StackConfig):
           self._register[key] = arg

       def run(self):
           for key,value in self._register.items():
               obj = value()
               print(key,obj)
    site = AdminSite()
    site.registry(1)
    site.registry(2,StackConfig)
    site.registry(3,UserConfig)
    site.run()
    class StackConfig(object):
       list_display = '李邵奇'

    class UserConfig(StackConfig):
       list_display = '利奇航'


    class AdminSite(object):
       def __init__(self):
           self._register = {}

       def registry(self,key,arg=StackConfig):
           self._register[key] = arg

       def run(self):
           for key,value in self._register.items():
               obj = value()
               print(key,obj.list_display)
    site = AdminSite()
    site.registry(1)
    site.registry(2,StackConfig)
    site.registry(3,UserConfig)
    site.run()
    class StackConfig(object):
       list_display = '李邵奇'
       
       def changelist_view(self):
           print(self.list_display)
           
    class UserConfig(StackConfig):
       list_display = '利奇航'

    class AdminSite(object):
       def __init__(self):
           self._register = {}

       def registry(self,key,arg=StackConfig):
           self._register[key] = arg

       def run(self):
           for key,value in self._register.items():
               obj = value()
               obj.changelist_view()
    site = AdminSite()
    site.registry(1)
    site.registry(2,StackConfig)
    site.registry(3,UserConfig)
    site.run() # 你扫起 你扫起 李启舫

    3.特殊成员

    3.1 __init__()

    # 创建类的对象的第二步 为空对象填充值
    class Foo:
       """
      类是干啥的。。。。
      """
       def __init__(self,a1):
           """
          初始化方法
          :param a1:
          """
           self.a1 = a1
           
    obj = Foo('alex')

    3.2 __new__()

    # 创建类的对象的第一步 创建空对象
    class Foo(object):
       def __init__(self):
           """
          用于给对象中赋值,初始化方法
          """
           self.x = 123
       def __new__(cls, *args, **kwargs):
           """
          用于创建空对象,构造方法
          :param args:
          :param kwargs:
          :return:
          """
           return object.__new__(cls)

    obj = Foo()

    3.3 __cal__()

    # 对象加括号 调用cal方法
    class Foo(object):
       def __call__(self, *args, **kwargs):
           print('执行call方法')

    # obj = Foo()
    # obj()
    Foo()()
    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    # 网页的源码 网页诞生于此
    from wsgiref.simple_server import make_server

    def func(environ,start_response):
       start_response("200 OK", [('Content-Type', 'text/plain; charset=utf-8')])
       return ['你好'.encode("utf-8") ]

    class Foo(object):

       def __call__(self, environ,start_response):
           start_response("200 OK", [('Content-Type', 'text/html; charset=utf-8')])
           return ['你<h1 style="color:red;">不好</h1>'.encode("utf-8")]


    # 作用:写一个网站,用户只要来方法,就自动找到第三个参数并执行。
    server = make_server('127.0.0.1', 8000, Foo())
    server.serve_forever()

    3.4 __getitem__() / __setitem__() / __delitem__()

    class Foo(object):

       def __setitem__(self, key, value):
           pass

       def __getitem__(self, item):
           return item + 'uuu'

       def __delitem__(self, key):
           pass


    obj1 = Foo()
    obj1['k1'] = 123  # 内部会自动调用 __setitem__方法
    val = obj1['xxx']  # 内部会自动调用 __getitem__方法
    print(val)
    del obj1['ttt']  # 内部会自动调用 __delitem__ 方法

    3.5 __str__()

    class Foo(object):
       def __str__(self):
           """
          只有在打印对象时,会自动化调用此方法,并将其返回值在页面显示出来
          :return:
          """
           return 'asdfasudfasdfsad'

    obj = Foo()
    print(obj) # asdfasudfasdfsad
    class User(object):
       def __init__(self,name,email):
           self.name = name
           self.email = email
       def __str__(self):
           return "%s %s" %(self.name,self.email,)
    user_list = [User('二狗','2g@qq.com'),User('二蛋','2d@qq.com'),User('狗蛋','xx@qq.com')]
    for item in user_list:
       print(item) # 打印对象 即str的返回值

    3.6 __dict__()

    class Foo(object):
       def __init__(self,name,age,email):
           self.name = name
           self.age = age
           self.email = email

    obj = Foo('alex',19,'xxxx@qq.com')
    print(obj)
    print(obj.name)
    print(obj.age)
    print(obj.email)
    val = obj.__dict__ # 去对象中找到所有变量并将其转换为字典
    print(val)

    3.7 上下文管理 【面试题】

    class Foo(object):
       def __enter__(self):
           self.x = open('a.txt',mode='a',encoding='utf-8')
           return self.x
       def __exit__(self, exc_type, exc_val, exc_tb):
           self.x.close()

    with Foo() as ff:
       ff.write('alex')
       ff.write('alex')
       ff.write('alex')
       ff.write('alex')
    # class Context:
    #     def __enter__(self):
    #         print('进入')
    #         return self
    #
    #     def __exit__(self, exc_type, exc_val, exc_tb):
    #         print('推出')
    #
    #     def do_something(self):
    #         print('内部执行2')
    #
    # with Context() as ctx:
    #     print('内部执行1')
    #     ctx.do_something()


    class Foo(object):
       def do_something(self):
           print('内部执行2')

    class Context:
       def __enter__(self):
           print('进入')
           return Foo()

       def __exit__(self, exc_type, exc_val, exc_tb):
           print('推出')

    with Context() as ctx:
       print('内部执行1')
       ctx.do_something()

    3.8 两个对象相加

    val = 5 + 8
    print(val)

    val = "alex" + "sb"
    print(val)

    class Foo(object):
       def __add__(self, other):
           return 123
       
    obj1 = Foo()
    obj2 = Foo()
    val = obj1 + obj2
    print(val) # 是add函数的返回值

    特殊成员:就是为了能够快速实现执行某些方法而生。

    4.内置函数补充

    4.1 type() 查看类型

    class Foo:
       pass

    obj = Foo()

    if type(obj) == Foo:
       print('obj是Foo类的对象')

    4.2 issubclass

    class Base:
       pass

    class Base1(Base):
       pass

    class Foo(Base1):
       pass

    class Bar:
       pass

    print(issubclass(Bar,Base)) # False
    print(issubclass(Foo,Base)) # True 判断类1是否是类2的子类

    4.3 isinstance

    class Base(object):
       pass

    class Foo(Base):
       pass

    obj = Foo()

    print(isinstance(obj,Foo))  # 判断obj是否是Foo类或其基类的实例(对象)True
    print(isinstance(obj,Base)) # 判断obj是否是Foo类或其基类的实例(对象)True

    4.4 super

    class Base(object):
       def func(self):
           print('base.func')
           return 123


    class Foo(Base):
       def func(self):
           v1 = super().func()
           print('foo.func',v1)

    obj = Foo()
    obj.func() # base.func   foo.func   123
    # super().func() 去父类中找func方法并执行
    class Bar(object):
       def func(self):
           print('bar.func')
           return 123

    class Base(Bar):
       pass

    class Foo(Base):
       def func(self):
           v1 = super().func()
           print('foo.func',v1)

    obj = Foo()
    obj.func() # bar.func foo.func 123
    # super().func() 根据类的继承关系,按照顺序挨个找func方法并执行(找到第一个就不在找了)
    class Base(object): # Base -> object
       def func(self):
           super().func()
           print('base.func')

    class Bar(object):
       def func(self):
           print('bar.func')

    class Foo(Base,Bar): # Foo -> Base -> Bar
       pass

    obj = Foo()
    obj.func() # bar.func base.func

    # super().func() 根据self对象所属类的继承关系,按照顺序挨个找func方法并执行(找到第一个就不在找了)

    5.异常处理

    5.1 基本格式

    try:
       pass
    except Exception as e:
       pass
    try:
       v = []
       v[11111] # IndexError
    except ValueError as e:
       pass
    except IndexError as e:
       pass
    except Exception as e:
       print(e) # e是Exception类的对象,中有一个错误信息。
    try:
       int('asdf')
    except Exception as e:
       print(e) # e是Exception类的对象,中有一个错误信息。
    finally:
       print('最后无论对错都会执行')
       
    # #################### 特殊情况 #########################
    def func():
       try:
           # v = 1
           # return 123
           int('asdf')
       except Exception as e:
           print(e) # e是Exception类的对象,中有一个错误信息。
           return 123
       finally:
           print('最后')

    func()

    5.2 主动发起异常

    try:
       int('123')
       raise Exception('阿萨大大是阿斯蒂') # 代码中主动抛出异常
    except Exception as e:
       print(e)
    def func():
       result = True
       try:
           with open('x.log',mode='r',encoding='utf-8') as f:
               data = f.read()
           if 'alex' not in data:
               raise Exception()
       except Exception as e:
           result = False
       return result

    5.3 自定义异常

    class MyException(Exception):
       pass

    try:
       raise MyException('asdf')
    except MyException as e:
       print(e)
    class MyException(Exception):
       def __init__(self,message):
           super().__init__()
           self.message = message

    try:
       raise MyException('asdf')
    except MyException as e:
       print(e.message)
  • 相关阅读:
    python's eithteenth day for me 面向对象——命名空间
    python's seventeenth day for me 面向对象
    python's sixteenth day for me 员工信息表
    python's fifteenth day for me 递归函数
    python's fourteenth day for me 内置函数
    用装饰器做一个登陆功能(进阶):
    装饰器 为多个函数加上认证功能(账号密码来源于文件),要求只要登陆成功一次,后续函数则无需登陆。
    python's thirteenth day for me 迭代器 生成器
    php函数
    php日期格式
  • 原文地址:https://www.cnblogs.com/usherwang/p/12917513.html
Copyright © 2011-2022 走看看