Python 随录———持续更新Updating

Python随录——持续更新 记录点滴

一、class与class()的区别

如果声明和定义类的时候带不带括号只是继承与不继承的关系,但在应用类对象的时候会是什么样子呢?

class Obj:
    def __init__(self):
        print "Obj __init__"

if __name__ ="__main__":
    ob1=Obj
    print "*"*10
    ob2=Obj()

运行结果如下:


其实对ob1=Obj相当于给Obj这个类创建一个别名并没有创建Obj的对象,而ob2=Obj()这个带括号的就是实打实的创建一个Obj的对象,后面想创建对象也可以使用ob3=ob1()。

二、查看导入模块里的方法及说明

最近在研究深度学习,在学习过程中会有很多的包,这里记录一下怎么查看导入包里的方法和说明。

这里主要运用三个函数,dir ,getattr,help

dir() 函数不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表。如果参数包含方法__dir__(),该方法将被调用。如果参数不包含__dir__(),该方法将最大限度地收集参数信息dir() 函数不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表。如果参数包含方法__dir__(),该方法将被调用。如果参数不包含__dir__(),该方法将最大限度地收集参数信息。

getattr() 函数用于返回一个对象属性值和对象方法。

help() 函数用于查看函数或模块用途的详细说明。

import os
methodlist=dir(os)
for _ in methodlist:
    method=getattr(os,_)
    print help(method)

运行结果:



三、__init__和 __new__的区别联系

注意:__new__只有在继承了object了才会有,其父类或爷爷类继承了object也行。

首先这两个内置方法都是在创建对象时被调用,调用顺序是先__new__然后__init__。

__init__方法是在创建对象时初始化一些变量等。

__new__方法是静态的主要是构造类的对象,同时返回该对象供其他引用,比如__init__里的self就引用了。

def __new__(cls, *args, **kwargs):

cls:是要实例化的类打印出来是:<class '__main__.ClassName'> 

*args 相当于Java里的可变参数,可传入列表

**kwargs 也是可变参数,可传入字典


运行结果:


PS:上面代码中obj.__new__(cls)也可以写成object.__new__(cls)因为__new__是静态方法。

四、函数作为参数进行传递

首先看一下在class之外的情况:


运行结果


这里runfunc(testfunc,1,2,3)如果改成了 runfunc(testfunc,(1,2,3)) 结果就会如下:


对比说明: 由原来的三个参数变成了一个参数

注意:这里主要体现了*args 的作用,大家都知道*args是指可以输出多个参数或参数以tuple的形式。

           当函数的参数是*args 在使用的时候去掉“*”的过程其实是一个套元组的过程,如果你传入的是1,2,3那么在使用args时就会变成(1,2,3),所以要保证函数之间参数不变的情况就要使用*args形式。

这里runfunc的args的“*”号要加都加,不加都不加。

下面看下一在class里面函数作为参数进行传递


运行结果:



这里注意的就是method需要类名Test去引用。上面例子是用静态的,下面使用非静态。


运行结果:


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值