一、面向对象复习

1、类的继承

class Base(object):
    def __init__(self,val):
        self.val = val

    def func(self):
        self.test()
        print(self.val)

    def test(self):
        print("Base.test")

class Foo(Base):
    def test(self):
        print("FOO.test")

    # def func(self):
    #     print(self.val,666)
    #有就执行自己的,没有就执行父类的
class Bar(object):
    def __init__(self):
        self._register = {}

    def regiter(self,a,b=None):
        if not b:
            b=Base
        self._register[a] = b(a)  #函数,类,对象

obj = Bar()  #实例化就会去执行它自己的__init__方法,并获取到一个对象b,b就可以调用里面的属性和方法了
obj.regiter(1,Foo)
obj.regiter(2)
print(obj._register)  #{1: <__main__.Foo object at 0x0000000002213160>, 2: <__main__.Base object at 0x0000000002213198>}
#obj._register[1] == Foo(1)
obj._register[1].func()  #Foo的对象  打印结果:FOO.test       1
obj._register[2].func()  #Base的对象  打印结果:Base.test     2

2、单例模式:单例模式是一个设计模式(说白了就是单个实例公用一个对象)

举例一:

s1.py

class Foo(object):
    def test(self):
        print("123")

v = Foo()
#v是Foo的实例

s2.py

from s1 import v as v1
print(v1,id(v1))  #<s1.Foo object at 0x0000000002221710> 35788560

from s1 import v as v2
print(v1,id(v2))   #<s1.Foo object at 0x0000000002221710> 35788560

# 两个的内存地址是一样的
# 文件加载的时候,第一次导入后,再次导入时不会再重新加载。

举例二:

class Singleton:
    def __new__(cls, *args, **kw):
        '''__new__是一个构造方法,self就是他构造的'''
        if not hasattr(cls, '_instance'):
            orig = super(Singleton, cls)
            cls._instance = orig.__new__(cls, *args, **kw)
        return cls._instance

one = Singleton()
two = Singleton()
print(one,two)   #他们两个的地址一样
# print(id(one),id(two))
one.name = 'alex'
print(two.name)

二、django-admin的简单回顾

1、admin

  a:models.py

     - 创建表

  b:admin.py

    - 注册表    admin.site.register(models.UserInfo)

  c:urls.py 

   - url(r'^admin/', admin.site.urls),

  PS: 

    1、动态生成url

    2、注册和生成url使用的都是admin.site

2、路由系统 

一个路径对应一个视图

url(r'^index/$', views.index,name="n1"), 
url(r'^index/(\d+)$', views.index,name="n2"), url(r'^blog/', include('blog.urls'))

有name的说明是反向解析,两种方式

代码中:
  reverse('n1')
  reverse('n2',args=(666,))

模板中:
  {% url 'n1' %}
  {% url 'n2' 666 %}

3、文件加载
  第一次导入后,再次导入时不再重新加载

4、面向对象

  - 封装

  - 继承

示例:

 1 class Base(object):
 2     def __init__(self,val):
 3         self.val = val
 4 
 5     def func(self):
 6         self.test()
 7         print(self.val)
 8 
 9     def test(self):
10         print("Base.test")
11 
12 class Foo(Base):
13     def test(self):
14         print("FOO.test")
15 
16     # def func(self):
17     #     print(self.val,666)
18     #有就执行自己的,没有就执行父类的
19 class Bar(object):
20     def __init__(self):
21         self._register = {}
22 
23     def regiter(self,a,b=None):
24         if not b:
25             b=Base
26         self._register[a] = b(a)  #函数,类,对象
27 
28 obj = Bar()  #实例化就会去执行它自己的__init__方法,并获取到一个对象b,b就可以调用里面的属性和方法了
29 obj.regiter(1,Foo)
30 obj.regiter(2)
31 print(obj._register)  #{1: <__main__.Foo object at 0x0000000002213160>, 2: <__main__.Base object at 0x0000000002213198>}
32 #obj._register[1] == Foo(1)
33 obj._register[1].func()  #Foo的对象  打印结果:FOO.test       1
34 obj._register[2].func()  #Base的对象  打印结果:Base.test     2
View Code

相关文章:

  • 2021-12-18
  • 2022-12-23
  • 2022-12-23
  • 2021-08-11
  • 2021-09-26
  • 2021-10-02
  • 2021-12-17
  • 2021-11-06
猜你喜欢
  • 2022-12-23
  • 2021-10-07
  • 2021-10-25
  • 2021-06-24
  • 2021-10-25
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案