一、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
新式类:广度优先(离哪个近先找哪个)
经典类:深度优先
类的成员:
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()