文档章节

Python 类,方法,属性

胡子叭槎
 胡子叭槎
发布于 2016/11/01 19:58
字数 1110
阅读 15
收藏 2
点赞 0
评论 0

1    我的第一个Python类

>>> import paramiko
>>> import sys
>>> import os
>>> class TestClass1():
...     tmp = 10
...     def Method1 (self):
...         self.tmp = 20

上面的类中定义了属性tmp ,在下面的方法中又对属性进行了修改,验证结果如下:

>>> obj1 = TestClass1()    # 类先实例化
>>> obj1.tmp               # 调用类的属性
10
>>> obj1.Method1()         # 调用类的方法
>>> obj1.tmp
20

    注意:类中的方法中必须有self,如上面的def Methon1 (self)

>>> class TestClass1():
...     tmp = 10
...     def Method1 (self,x=20):     # 方法中传参数x,这个x的默认值是20
...         self.tmp = x
...         self.tmp2 = x
...         
...     
... 
>>> obj1 = TestClass1()
>>> obj1.tmp
10
>>> obj1.Method1()
>>> obj1.tmp
20
>>> obj1.Method1(30)
>>> obj1.tmp
30

2    Python的构造方法

    Python的类默认都继承了基类,我们也可以自己构建自己的构造方法。解释:构造方法就是对类的属性,初始化。

>>> class TestClass1():
...     def __init__(self,x,y,z):       # 构造方法,传参数并初始化
...         self.x = x
...         self.y = y
...         self.z = z
...     def OtherMethon(self):          # 自定义方法
...         print self.x,self.y,self.z
...         
...     
... 
>>> obj2 = TestClass1(1,2,3)            # 类实例化的时候传入参数通过构造方法进行属性初始化
>>> obj2.x
1
>>> obj2.y
2
>>> obj2.z
3
>>> obj2.OtherMethon()
1 2 3

 

3    Python 类和方法写的一个计算器

#!/usr/bin/python2.7
#_*_coding:utf8_*_
# Aut wangzilong
# 2016-10
#
# 导入系统模块
import os
# 导入参数获取模块
import sys

import re

#1 定义类
class JiSuanQi():
    
#  1.1 定义构造函数,初始化所有参数
      def __init__(self,x,y):
          self.x = x
          self.y = y
      
#  1.2 定义加法
      def add(self,x,y):
          self.addx = int(x)
          self.addy = int(y)
          return self.addx + self.addy
#  1.3 定义减法
      def jianfa(self,x,y):
          self.jfx = int(x)
          self.jfy = int(y)
          return self.jfx - self.jfy
#  1.4 定义乘法
      def chengfa(self,x,y):
          self.cfx = int(x)
          self.cfy = int(y)
          return self.cfx * self.cfy

#  1.5 定义除法
      def chufa(self,x,y):
          self.chfx = int(x)
          self.chfy = int(y)
          if self.chfy == 0:
              return '除数不能为0'
          else:
              return self.chfx / self.chfy


prelist = sys.argv
last = ''
if len(prelist) <>  4:
    print '请输入正确参数'
else:
    meth = prelist[1]
    num1 = prelist[2]
    num2 = prelist[3]
    tmpobj = JiSuanQi(1,1)
    
    if meth == 'add' :
     last = tmpobj.add(num1,num2)
    elif meth == 'jianfa':
     last = tmpobj.jianfa(num1,num2)
    elif meth == 'chengfa':
     last = tmpobj.chengfa(num1,num2)
    elif meth == 'chufa':
     last = tmpobj.chufa(num1,num2)
    else:
        print '没有这个功能'

print last

 

4    paramiko 模块

    4.1 下载paramiko 软件包并通过Python 安装。

            下载地址:http://pan.baidu.com/s/1o7Jzl3s

             解压后进入文件夹进行安装python2.7 setup.py install

             安装完成之后再bpython中就可以import paramiko 了

    4.2 一个用paramiko 模块编写的Python脚本

#!/usr/bin/env python
# encoding: utf-8

#executive command
#导入模块
import paramiko
#实例化化一个sshclient对象
ssh = paramiko.SSHClient() 
#把没有在~/.ssh/know_hosts的指纹按照策略自动添加进去
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

#开始连接,并把用户名,密码,端口,主机名或ip地址传递到对方进行验证
ssh.connect('192.168.6.77',22,'root','answer@1')
#把执行的指令使用多变量赋值
#标准输出,标准输入,标准错误输出都分别定义
stdin,stdout,stderr = ssh.exec_command('uptime')
#打印输出内容
print stdout.read()
#关闭连接
ssh.close()

#upload file

import os
import sys
import paramiko
upload = paramiko.Transport(('192.168.6.77',22))
upload.connect(username='root',password='answer@1')
upload_exec = paramiko.SFTPClient.from_transport(upload)
upload_exec.put('paramiko_interoduct.py','/tmp/paramiko_interoduct.py')
upload.close()

#download file
import os
import sys
import paramiko
download = paramiko.Transport(('192.168.6.77',22))
download.connect(username='root',password='answer@1')
download_exec = paramiko.SFTPClient.from_transport(download)
download_exec.get('/tmp/1.txt','./1.txt')
download.close()

#from password key upload or download file
import  paramiko
pravie_key_path = './id_rsa'
password_key = paramiko.RSAKey.from_private_key_file(pravie_key_path)
upload = paramiko.Transport(('192.168.6.77',22))
upload.connect(username='root',pkey=password_key)
upload_exec = paramiko.SFTPClient.from_transport(upload)
upload_exec.put('paramiko_interoduct.py','/tmp/paramiko_interoduct.py')
upload.close()

import paramiko
pravie_key_path = './id_rsa'
password_key = paramiko.RSAKey.from_private_key_file(pravie_key_path)
download = paramiko.Transport(('192.168.6.77',22))
download.connect(username='root',pkey=password_key)
download_exec = paramiko.SFTPClient.from_transport(download)
download_exec.get('/tmp/1.txt','./1.txt')
download.close()

#!/usr/local/python27/bin/python
#_*_ coding:utf8 _*_
#

from fabric.api import *
from fabric.colors import *

#定义远程服务器角色列表
env.roledefs = {
        'cobbler':['root@172.16.10.12:22',],
        'clinent':['root@172.16.10.16:22',]
                  }

#对角色和任务进行装饰
#run(command)执行指令
#put(local_file,remote_file)上传至角色服务器上
#get(remote_file,local_file)从角色服务器上下载至本地服务器

@roles('cobbler')
def task1():
     b = run('yum install mysql mysql-server -y')
     #b = run('ifconfig eth0')
     print red(b)

@roles('clinent')
def task2():
    a = run('yum install mysql mysql-server -y')
    #a = run('ls -l ')
    print green(a)

def dotask():
    execute(task1)
    execute(task2)
fabric执行和以往的脚本执行有些许不同
安装完毕fabric之后它会提供一个fab的指令通过fab指令去执行调用fab模块api编写的脚本
命令格式:fab -f script_name.py function
其中script_name:就是脚本名字也就是你编写的文件
function:是script_name文件的函数(方法)


#!/usr/local/python27/bin/python
#_*_ coding:utf8 _*_
#

from fabric.api import *
from fabric.colors import *
host12 = 'root@172.16.10.12:22'
host13 = 'root@172.16.10.13:22'
host14 = 'root@172.16.10.14:22'
host15 = 'root@172.16.10.15:22'

env.passwords = {
                 host12:"xxxxxx",
                 host13:"xxxxxx",
                 host14:"xxxxxx",
                 host15:"xxxxxx",
                 }
                                               
env.roledefs = {
               'net_1':[host12,host13],
               'net_2':[host14,host15]
               }

@roles('net_1')
def task1():
    put('/tmp/up1.txt','/tmp/up1.txt')
    get('/tmp/uplooking.txt','/tmp/uplooking.txt')
    # run('ip addr|grep 192')

@roles('net_2')
def task2():
    run('ip addr|grep 192')

#def dotask():
#    execute(task1)
#    execute(task2)

© 著作权归作者所有

共有 人打赏支持
胡子叭槎
粉丝 21
博文 126
码字总数 132913
作品 0
成都
数据库管理员
Python面向对象编程之我见

面向对象基本概念 面向对象是一种编程范式。范式是指一组方法论。编程范式是一组如何组织代码的方法论。编程范式指的是软件工程中的一种方法学。 一些主流的编程范式: OOP - 面向对象编程 ...

bigstone2012 ⋅ 05/31 ⋅ 0

Python学习之面向对象高级编程

数据封装、继承和多态只是面向对象程序设计中最基础的3个概念。在Python中,面向对象还有很多高级特性,如:多重继承、定制类、元类等概念。 slots 作用:限制实例的属性。 Python允许在定义...

stone_zhu ⋅ 06/19 ⋅ 0

python3.x与python2.x的区别汇总

python3.x与python2.7.x都是比较流行的版本,虽然建议现在的初学者开始学习python3.x的版本,但是还有很多的工程使用的是python2.7.x版本。观看代码的时候难免会出现一些问题。 在google上搜...

oldpan ⋅ 2017/10/10 ⋅ 0

Python面向对象之运算符重载

运算符重载只是意味着在类方法中拦截内置的操作,也就是说当类的实例出现在内置操作中,Python自动调用我们的方法,并且我们的方法的返回值变成了相应操作的结果。 关于重载的关键知识点: ...

bigstone2012 ⋅ 06/08 ⋅ 0

能让你代码更 Pythonic 的小技巧

下面例举几个在工作中用到过,个人认为比较 Pythonic 的一些实现个技巧: cached_property 它的作用是将一个方法的计算结果缓存到对象的 当中,熟悉 Flask 的人对这个应该不陌生,Django 应该...

实验楼 ⋅ 06/19 ⋅ 0

Python学习日记七(面向对象,继承)

一.面向对象 1 .类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对 象所共有的属性和方法。对象是类的实例。 类变量:类变量在整个实例化的对象中是公用的。类变...

HaleyLiu ⋅ 04/12 ⋅ 0

Python—duck type鸭子类型

在程序设计中,鸭子类型(英语:duck typing)是动态类型的一种风格。在这种风格中,一个对象有效的语义,不是由继承自特定的类或实现特定的接口,而是由当前方法和属性的集合决定。这个概念...

qq_39521554 ⋅ 04/20 ⋅ 0

用 Python 编写的 Python 解释器

(点击上方公众号,可快速关注) 翻译: qingyunha 英文:Allison Kaptur http://qingyunha.github.io/taotao/ Allison是Dropbox的工程师,在那里她维护着世界上最大的由Python客户组成的网络...

Python开发者 ⋅ 04/22 ⋅ 0

Python基础-面向对象组合、继承、子类调父类

组合 多个数据属性通过一个类实例化的对象做关联 继承 通过集成可以派生(衍生)出新的方法 单继承 多继承 接口继承 父类规定子类必须要使用的类方法,方便程序归一化设计 接口继承示例 继承顺序...

ZHAO_JH ⋅ 04/13 ⋅ 0

Python学习笔记二十四( 元类 )

class属性 class属性可以查看对象的类型. Person 类的实例对象person 的类型时Person 类类型, Python 是面向对象的语言, 那么Person 的类对象的类型又是什么? Person / int / str 的类对象的...

DragonFangQy ⋅ 05/27 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JavaScript零基础入门——(十)JavaScript的DOM基础

JavaScript零基础入门——(十)JavaScript的DOM基础 欢迎大家回到我们的JavaScript零基础入门,上一节课,我们了解了JavaScript中的函数,这一节课,我们来了解一下JavaScript的DOM。 第一节...

JandenMa ⋅ 13分钟前 ⋅ 0

Spring mvc DispatchServlet 实现原理

在Spring中, ContextLoaderListener只是辅助类,在web 容器启动的时候查找并创建WebApplicationContext对象,通过该对象进行加载spring的配置文件。而真正的逻辑实现其实是在DispatcherSer...

轨迹_ ⋅ 24分钟前 ⋅ 0

Weex起步

本教程假设你已经在你的本地环境安装了node 其实weex起步教程在 https://github.com/lilugirl/incubator-weex 项目说明文件中都已经有了,但为了有些同学看到英文秒变文盲,所以这里我重新写...

lilugirl ⋅ 32分钟前 ⋅ 0

Jenkins实践1 之安装

1 下载 http://mirrors.jenkins.io/war/latest/jenkins.war 2 启动 java -jar jenkins.war 前提:安装jdk并配置环境变量 启动结果节选: ************************************************......

晨猫 ⋅ 39分钟前 ⋅ 0

组合数学 1-2000 中,能被6或10整除的数的个数

1--2000 中,能被6或10整除的数的个数 利用集合的性质 能被6整除的个数 2000/6 = 333 能被10整除的个数 2000/10 = 200 能被6和10整除的个数 2000/30 = 66 能被6或10整除的个数 333+200-66 =...

阿豪boy ⋅ 48分钟前 ⋅ 0

一篇文章学懂Shell脚本

Shell脚本,就是利用Shell的命令解释的功能,对一个纯文本的文件进行解析,然后执行这些功能,也可以说Shell脚本就是一系列命令的集合。 Shell可以直接使用在win/Unix/Linux上面,并且可以调用...

Jake_xun ⋅ 今天 ⋅ 0

大数据工程师需要精通算法吗,要达到一个什么程度呢?

机器学习是人工智能的一个重要分支,而机器学习下最重要的就是算法,本文讲述归纳了入门级的几个机器学习算法,加大数据学习群:716581014一起加入AI技术大本营。 1、监督学习算法 这个算法由...

董黎明 ⋅ 今天 ⋅ 0

Kylin 对维度表的的要求

1.要具有数据一致性,主键值必须是唯一的;Kylin 会进行检查,如果有两行的主键值相同则会报错。 2.维度表越小越好,因为 Kylin 会将维度表加载到内存中供查询;过大的表不适合作为维度表,默...

无精疯 ⋅ 今天 ⋅ 0

58到家数据库30条军规解读

军规适用场景:并发量大、数据量大的互联网业务 军规:介绍内容 解读:讲解原因,解读比军规更重要 一、基础规范 (1)必须使用InnoDB存储引擎 解读:支持事务、行级锁、并发性能更好、CPU及...

kim_o ⋅ 今天 ⋅ 0

代码注释中顺序更改 文件读写换行

`package ssh; import com.xxx.common.log.LogFactory; import com.xxx.common.log.LoggerUtil; import org.apache.commons.lang3.StringUtils; import java.io.*; public class DirErgodic ......

林伟琨 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部