zoukankan      html  css  js  c++  java
  • doraemon的python 嵌套补充和特殊成员

    7.5.4 嵌套

    • 函数:参数可以试任意类型

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

    • 继承关系的查找关系

    class School(object):
       def __init__(self,title,addr):
           self.title = title
           self.address = addr
           
    class ClassRoom(object):
       
       def __init__(self,name,school_object):
           self.name = name
           self.school = school_object
           
    s1 = School('北京','沙河')
    s2 = School('上海','浦东')
    s3 = School('深圳','南山')

    c1 = ClassRoom('全栈21期',s1)
    c1.name
    c1.school.title
    c1.school.address
    # ############################################
    v = [11,22,33,{'name':'山海','addr':'浦东'}]

    v[0]
    v[3]['name']

     

    class Foo:
       def __init__(self,num):
           self.num = num
           
           
    cls_list = []
    for i in range(10):
       cls_list.append(Foo)
       
    for i in range(len(cls_list)):
       obj = cls_list[i](i)
       print(obj.num)

     

    class Foo:
    def f1(self):
           print('f1')
       
       def f2(self):
           print('f2')

    obj = Foo()

    v = [ obj.f1,obj.f2 ]
    for item in v:
       item()
    #当做参数传递
    class Foo:
       pass

    class Foo(object):
       pass

    # 在python3中这俩的写法是一样,因为所有的类默认都会继承object类,全部都是新式类。


    # 如果在python2中这样定义,则称其为:经典类
    class Foo:
       pass
    # 如果在python2中这样定义,则称其为:新式类
    class Foo(object):
       pass

    class Base(object):
       pass
    class Bar(Base):
       pass
    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)
    #类似想要多个元素组合在一起,应该要一级一级来


    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()
    #对象和类在字典中的应用

    7.6 特殊成员

    7.6.1 init

    class Foo:
       def __init__(self,name):
           self.name = name
           
    obj = Foo('liujia')

    7.6.2 new

    class Foo:
       def __init__(self,name):
    self.name = name
       def __new__(cls,*args,**kwargs):
           """
          用于创建空对象,构造方法
          """
           return object.__new__(cls)
    obj = Foo()
    #object,它new了一个对象出来

    7.6.3 cal

    class Foo:
       def __call__(self,*args,**kwargs):
           print(123)
           
    obj = Foo()
    obj()
    #call的作用:这一步就能等于上面两步Foo()()

    7.6.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__ 方法,删除

    7.6.5 str

    class Foo:
       def __str__(self):
           """
          只有在打印对象的时候,会自动调用此方法,并将其返回值显示在页面
          """
           
    obf = Foo()
    print(obj)
    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__的返回值

    7.6.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)

    7.6.7 上下文管理 enter exit

    class Foo:
       def __enter__(self):
           self.x = open('a.txt',mode='a',encoding 'utf-8')
           return self.x #return的值赋给了下面的ff
       def __exit__(self,exc_type,exc_val.exc_tb):
           self.x.close()
           
    with Foo() as ff:
       ff.write('liujia')
    class Foo(object):
       def do_something(self):
           print('内部执行')

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

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

    with Context() as ctx:
       print('内部执行')
       ctx.do_something()
       #总结,就是在执行某个函数之前,先执行一个程序,在执行另一个程序

    7.6.8 两个对象相加 add

    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)
    #加减乘除都可以,类似的

     

  • 相关阅读:
    linux /proc/pid进程信息说明
    fdopen()和fileno()函数
    什么是Intent
    内容提供器
    app:showAsAction 和android:showAsAction
    android:oneshot
    Android的三种主流资源尺寸
    Android中android:visibility的3中属性的剖析
    Android中的ProgressBar的android:indeterminate
    uses-permission和permission详解
  • 原文地址:https://www.cnblogs.com/doraemon548542/p/11264283.html
Copyright © 2011-2022 走看看