zoukankan      html  css  js  c++  java
  • Python面向对象编程(三)

    第29,33个:类成员之特殊成员

    29:

     1 class foo:
     2 
     3   #def __init__(self,name):
     4   #self.name = name
     5 
     6   def __init__(self): #构造方法
     7     print("init")
     8   def __del__(self): #析构方法,自动执行
     9     pass
    10 
    11   def __call__(self, *args, **kwargs):
    12     print("call")
    13 
    14 
    15 obj = foo() #创建对象执行init方法
    16 obj() #对象加括号执行call方法
    17 
    18 ret = obj.__class__ #运行的类名赋值给ret
    19 #print(ret)
     1 class foo:
     2 
     3     def __init__(self,name,age):
     4         self.name = name
     5         self.age = age
     6 
     7     def __str__(self):  #特殊成员__str__
     8         return "%s + %s" %(self.name,self.age)
     9 obj1 = foo("kai",23)
    10 obj = foo("han",24)
    11 print(obj)
    12 print(obj1)

     30:

     1 class foo:
     2     def __init__(self,name,age):
     3         self.name = name
     4         self.age = age
     5 
     6 obj = foo("han",19)
     7 ret = obj.__dict__ #获取对象中封装的所有数据
     8 print(ret)
     9 #输出的是:{'age': 19, 'name': 'han'}
    10 
    11 print(foo.__dict__) #获取类中封装的所有数据

     32:

     1 class foo:
     2     #如果有两个getitem执行后一个
     3     def __getitem__(self, item):
     4         print(item.start)
     5         print(item.stop)
     6         print(item.step)
     7 
     8     def __getitem__(self, item): #运行的ret和rets
     9         print(type(item))
    10 
    11     def __setitem__(self, key, value): #key=[1:4] value=[22,33,55,66,77]
    12         print(type(key),type(value))
    13     
    14     def __delitem__(self, key):
    15         pass
    16 
    17 obj = foo()  #创建对象
    18 ret = obj[1:9:5] #切片
    19 rets = obj["hk"]
    20 
    21 obj[1:4] = [22,33,55,66,77]

    33:

    1 class foo:
    2     def __iter__(self): #iter迭代方法
    3         yield 1
    4         yield 2 
    5         
    6 obj = foo()
    7 for item in obj:  #obj调用函数方法里的iter
    8     print(item)

     第35个:其他之isinstance和issubclass

     1 class bar:
     2     pass
     3 
     4 class foo(bar):
     5     pass
     6 obj = foo()
     7 ret = isinstance(obj,foo) #查看obj对象是不是foo的实例
     8 ret1 = isinstance(obj,bar) #查看obj对象是不是 foo的父类bar的实例
     9 print(ret)
    10 print(ret1)
    11 
    12 rets = issubclass(foo,bar) #foo是不是bar的子类,如果是子类返回true,如果不是返回false
    13 print(rets)

    重要:

    !!!在不修改源代码的前提下,通过继承的方式实现功能

     1 class c1:
     2     def f1(self):
     3         print("c1.f1")
     4 
     5 class c2(c1):
     6     def f1(self):
     7         #主动执行父类的f1方法
     8         super(c2,self).f1()
     9         #c1.f1(self)主动执行父类的另一种形式,知道就好不建议使用
    10         print("c2.f1")
    11 
    12 obj = c2()
    13 obj.f1()
    14 
    15 '''
    16 输入结果:
    17 c1.f1
    18 c2.f1
    19 '''

     第39个:单例模式

     1 class foo:
     2 
     3     instance = None #静态字段由类访问
     4 
     5     def __init__(self,name):
     6         self.name = name
     7 
     8     @classmethod #类方法
     9     def get_instance(cls): #类名
    10         if cls.instance:
    11             return cls.instance
    12         else:
    13             obj = cls("han")
    14             cls.instance = obj
    15             return obj
    16 
    17 obj = foo.get_instance()
    18 obj1 = foo.get_instance() 

     

  • 相关阅读:
    运动世界校园破解2.0
    Docker进阶操作
    一键开启https
    Docker的第一次实践总结
    手机通话黑屏
    mysql安装、操作、配置、远程
    excel添加列数据导入后,列数据不显示的问题
    常见邮箱的各类协议服务器地址
    POP3/SMTP/IMAP等邮箱协议的基本概念
    You credentials did not work (The logon attempt failed)
  • 原文地址:https://www.cnblogs.com/hanxiaobei/p/5753441.html
Copyright © 2011-2022 走看看