一、python的面向对象

1、封装之一 

python的封装就是把类中的变量通过__init__构造方法封装在了self中,self在类被实例化以后,就是实例化的名字。即一个类中有所有的就去,但是都可以同时使用self中的变量。

2、继承

class abc:

    def test(self):

        pass

class a123(abc):

    def test2(self):

        pass

以上就是a123类继承了abc类.


新式类和经典类:

上面的例子为经典类,下面例子是新式类:

class test(object):

    def __init__(self):

        pass

python 11期 第七天_python  paramiko

新式类:广度优先(离哪个近先找哪个)

经典类:深度优先

python 11期 第七天_python  paramiko_02

类的成员:

a、字段

b、方法

c、属性

将添加有@property装饰器的方法,叫属性,且属性只能有一个self参数。属性与方法的区别就是在执行时候不需要加()括号。还有就是叫法上略有不同。

属性常用在以某些特殊场合,比如某一个函数的返回结果是要从数据库中去查询数据,如果改做属性以后,就可以写在sql语句中,如果是函数名,则调用时需要加上小括号。

属性的两种定义方法:

第一:

# ############### 定义 ###############

class Pager: 

    def __init__(self, current_page):

        # 用户当前请求的页码(第一页、第二页...)

        self.current_page = current_page

        # 每页默认显示10条数据

        self.per_items = 10 


    @property

    def start(self):

        val = (self.current_page - 1) * self.per_items

        return val

    @property

    def end(self):

        val = self.current_page * self.per_items

        return val

# ############### 调用 ###############

p = Pager(1)

p.start 就是起始值,即:m

p.end   就是结束值,即:n


备注:访问静态字段的时候用类名调用,访问动态字段的时候,用对象名调用。

第二:使用静态字段创建属性

class Foo:

    def get_bar(self):

        return 'wupeiqi'


    BAR = property(get_bar)

obj = Foo()

reuslt = obj.BAR        # 自动调用get_bar方法,并获取方法的返回值

print reuslt


Django视图中的request.POST方法就是使用的静态字段方式创建的属性。


3、类方法

在一个类中的方法加上装饰器@classmethod后,此方法中的形参self要更改为cls,且此方法只能有cls一个参数,此方法在调用时候不需要实例化,直接使用类名加方法名调用,并将类自身赋值给cls,

4、静态方法

在一个类的方法中加上装饰器@staticmethod,此方法名不需要加self的形参,调用时也是用类名来调用,多用于不需要实例化的在中使用,相当于前面加了一个类名的函数来直接调用,

类的普通私有字段:

class C:

    def __init__(self):

        self.name = '公有字段'

        self.__foo = "私有字段"


类的私有静态字段和公有静态字段:

class C:

    __name = "公有静态字段"


    def func(self):

        print C.__name

class D(C):

    def show(self):

        print C.__name



C.__name       # 类不可访问           


obj = C()

obj.func()     # 类内部可以访问     ==> 正确


obj_son = D()

obj_son.show() # 派生类中不可以访问   


私有静态字段

私有字段不能在外面直接调用,但是可以在类的方法中使用。因此如果想在类外调用此字段,需要先在类的方法中调用,然后实例化类成为对象,通过对象调用此方法。


总结:私有方法外部也无法直接访问,也只能通过内部普通方法来调用。加有@staticmethod私有的静态方法也一样,外部无法直接调用。类中所有的私有方法或字段在外面均无法访问。继承类(子类)也无法访问父类中的私有方法或私有字段。

如果要强制调用也可以,方法是:将类实例 化后,在调用时使用:obj._class__name,在类名前加一个下划线,私有字段前加两个下划线,但是不推荐使用此方法。



二、模块 paramiko


paramiko是一个用于做远程控制的模块,使用该模块可以对远程服务器进行命令或文件操作,值得一说的是,fabric和ansible内部的远程管理就是使用的paramiko来现实。

安装:

先安装 pycrypto,依赖包

wget http://files.cnblogs.com/files/wupeiqi/pycrypto-2.6.1.tar.gz

tar -xvf pycrypto-2.6.1.tar.gz

cd pycrypto-2.6.1

python setup.py build

python setup.py install


下载安装 paramiko

wget http://files.cnblogs.com/files/wupeiqi/paramiko-1.10.1.tar.gz

tar -xvf paramiko-1.10.1.tar.gz

cd paramiko-1.10.1

python setup.py build

python setup.py install


example1:

import paramiko

ssh = paramiko.SSHClient()

ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

ssh.connect('192.168.1.108', 22, 'test', '123')

stdin, stdout, stderr = ssh.exec_command('df')

print stdout.read()

ssh.close();


example2:

import paramiko

private_key_path = '/home/auto/.ssh/id_rsa'

key = paramiko.RSAKey.from_private_key_file(private_key_path)

ssh = paramiko.SSHClient()

ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

ssh.connect('主机名 ', 端口, '用户名', key)

stdin, stdout, stderr = ssh.exec_command('df')

print stdout.read()

ssh.close()