python 类的调用和继承

调用

 

 1 import requests
 2 class requests01():
 3     def get(url,data01):
 4         r = requests.get(url,data=data01)
 5         print("get返回code值:",r.status_code)
 6         print("post返回值以json格式输出:",r.json())
 7     def post(url,data01):
 8         l = requests.post(url,data=data01)
 9         print("post返回值以json格式输出:",l.json())
10 if __name__ == '__main__':
11     url="http://119.23.241.154:8080/futureloan/mvc/api/member/register"
12     data01={"mobilephone":"15184411172","pwd":"123123"}
13     t = requests01.get(url,data01)
14     '''
15     url = "http://119.23.241.154:8080/futureloan/mvc/api/member/register"
16     data01 = {"mobilephone": "15184411173","pwd": "123456"}
17     '''
18     t01 = requests01.post(url,data01)

 

继承

继承是一种创建新类的机制,目的是专门使用或者修改现有类的行为.被继承的类称为基类或者超类.新类称为派生类或子类.通过继承创建类时,所创建的类将继承其基类所定义的属性,但是,派生类可以重新定义任何这些属性并添加自己的新属性.

在class语句中使用以逗号分隔的基类名称列表来指定继承,如果没有有效的自定义基类,类要继承object(新式类).object是所有Python对象的基类,提供了一些常用方法(如__str__())的默认实现.

继承特点:

  1. 继承通常用于重新定义基类中已经定义的方法,从而达到代码复用的目的.

  2. 在多继承的类中搜索一个属性时,按照方法解析顺序搜索(MRO)来搜索属性.

  3. 派生类定义__init__()时,不会自动调用基类的__init__()方法.因此,要由派生类自己调用基类的__init__()方法来对它们进行恰当的初始化.正因为是自己显示调用__init__()方法,所以继承顺序与__init__()方法调用顺序无关啊;

  4. 如果派生类B重新实现了基类A的fun()方法,但是还想调用基类的fun()方法.为此,有一种方法可以显示地调用基类中的原始方法,将实例self作为第一个参数传递即可,A.fun(self),但是如果出现了多重继承,这样的调用方式容易产生混淆,让人以为是类B实现了fun()方法,见代码:

    #!/usr/bin/python
    
    
    # -*- coding: utf-8 -*-
    
    class A(object):
       def f(self):
           print 'A f'
    
    class B(A):
       pass
    
    class C(B):
       def f(self):
           B.f(self)
           print 'C f'
    def fun():
       c = C()
       c.f()
    if __name__ == '__main__':#主程序
       fun()#'A f' 'C f'
    1. 解决上述问题的方案是使用super函数,将B.f(self)替换为super(C,self).fun()即可,super函数会按照MRO查找函数,如果未找到则抛出异常,这种方式更加直白,一看就懂.

    公有,保护,私有成员

    公有成员:不以_开头的变量或函数,外部和子类都可以访问;

    保护成员:以一个_开头的变量或函数,按理说只有类内部和子类可以访问,外部不该访问,但是可以访问;

    私有成员:以__开头的变量或函数,只有类的内部才能访问到,子类和外部不能访问.但是可以使用非常手段访问(以_classname__var就能访问到);

     1 class A(object):
     2     a = 0
     3     _b = 1
     4     __c = 2
     5     def __init__(self):
     6         self.A = 0
     7         self._B = 1
     8         self.__C = 2
     9 
    10     @staticmethod
    11     def static_f():
    12         print 'A static_f'
    13 
    14     @classmethod
    15     def class_f(cls):
    16         print 'B class_f'
    17 
    18 class B(A):
    19     def __init__(self):
    20         super(B,self).__init__()
    21 
    22 
    23 def fun2():
    24     a = B()
    25     print dir(a)#['A', '_A__C', '_A__c', '_B', '__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_b', 'a', 'class_f', 'static_f']
    26     print a.a     #0
    27     print a._b    #1
    28     #print a.__c  error
    29     print a._A__c #2, 防止了命名冲突,  如果这里不懂,参考上述链接
    30     print a.A     #0
    31     print a._B    #1
    32     #print a.__C   error
    33     print a._A__C #2
    34     a.static_f()  #A static_f
    35     a.class_f()   #B class_f

     

还在研究中。。。。

转载于:https://www.cnblogs.com/yund/p/8472963.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值