python 面向?qū)ο?/h1>

python 面向?qū)ο?/code>

class Foo():
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def skill(self):
        print(self.name ,self.age,"開大快跑")
obj=Foo("安妮",16)
obj.skill()
result:
安妮 16 開大快跑

self代表類的實(shí)例,而非類

類的方法與普通的函數(shù)只有一個(gè)特別的區(qū)別——它們必須有一個(gè)額外的第一個(gè)參數(shù)名稱, 按照慣例它的名稱是 self。
class Test:
    def prt(self):
        print(self)
        print(self.__class__)
 
t = Test()
t.prt()
以上實(shí)例執(zhí)行結(jié)果為:
<__main__.Test instance at 0x10d066878>
__main__.Test
從執(zhí)行結(jié)果可以很明顯的看出娇斩,self 代表的是類的實(shí)例,代表當(dāng)前對(duì)象的地址穴翩,而 self.class 則指向類犬第。
self 不是 python 關(guān)鍵字,我們把他換成 runoob 也是可以正常執(zhí)行的:

Python內(nèi)置類屬性

__dict__ : 類的屬性(包含一個(gè)字典芒帕,由類的數(shù)據(jù)屬性組成)
__doc__ :類的文檔字符串
__name__: 類名
__module__: 類定義所在的模塊(類的全名是'__main__.className'歉嗓,如果類位于一個(gè)導(dǎo)入模塊mymod中,那么className.__module__ 等于 mymod)
__bases__ : 類的所有父類構(gòu)成元素(包含了一個(gè)由所有父類組成的元組)
Python內(nèi)置類屬性調(diào)用實(shí)例如下:
實(shí)例
class Person():
     city = "BeiJing" # 類的數(shù)據(jù)屬性
     def __init__(self,name,age):
         self.Name = name
         self.Age = age
     def run(self):
          print('{} is running'.format(self.Name))
anni=Person("anni",16)
anni.run()
 print ("Person.__doc__:", Person.__doc__)
 print ("Person.__name__:", Person.__name__)
 print ("Person.__module__:", Person.__module__)
 print ("Person.__bases__:", Person.__bases__)
 print ("Person.__dict__:", Person.__dict__)
 result:
 Person.__doc__: None
 Person.__name__: Person
 Person.__module__: __main__
 Person.__bases__: (<class 'object'>,)
Person.__dict__: {'__module__': '__main__', 'city': 'BeiJing', '__init__': <function Person.__init__ at 0x00000000025EA8C8>, 'run': <function Person.run at 0x00000000025EA7B8>, '__dict__': <attribute '__dict__' of 'Person' objects>, '__weakref__': <attribute '__weakref__' of 'Person' objects>, '__doc__': None}

類方法

class Person():
     city = "BeiJing" # 類的數(shù)據(jù)屬性
     def __init__(self,name,age):
         self.Name = name
         self.Age = age
     def run(self):
          print('{} is running'.format(self.Name))
     @classmethod    //類方法
     def sleep(cls):     //cls替代self
         print(cls)
anni=Person("anni",16)
anni.run()
Person.sleep()
anni.sleep()
result:
anni is running
<class '__main__.Person'>
<class '__main__.Person'>

list背蟆、dict 等都成為工廠函數(shù)鉴分,它們本身就是一個(gè)類,誰調(diào)誰好使 誰調(diào)带膀,就向誰的列表中添加

li = list('yangge')
print(type(li))
l2 = list('yangge')
l2.append(1)
li.append(2)
print(l2)
print(li)
result:
<class 'list'>
['y', 'a', 'n', 'g', 'g', 'e', 1]
['y', 'a', 'n', 'g', 'g', 'e', 2]

靜態(tài)方法

class Math():
    @staticmethod
    def Add(a,b):
        print(a+b)
Math.Add(1,3)  #調(diào)用函數(shù)應(yīng)該有2個(gè)參數(shù)就傳2個(gè)參數(shù)
op=Math()
# 實(shí)例也可以使,但通常靜態(tài)方法都是給類用的,實(shí)例在使時(shí)喪失了自動(dòng)動(dòng)傳參的機(jī)制
op.Add(1,4)
result:
     4
     5
# 需求
# 1.定義三個(gè)類:Student Teacher ClassName
# 2.可以通過 Teacher的實(shí)例志珍,可以查詢到這個(gè)對(duì)象的所有學(xué)生,還可以查詢到這個(gè)對(duì)象所管理的班級(jí)
# 3.學(xué)生必須創(chuàng)建4個(gè)垛叨,且至少分配給兩個(gè)老師伦糯,還被分別分配到了兩個(gè)班級(jí)
# a  c1 laowang
# b  c1 laowang
# c  c2 laoguo
# d  c2 laoguo
class Class():
    all_class=[]
    def __init__(self,name,teacher):
        self.name=name
        self.teacher=teacher
        Class.all_class.append(self)
class Student():
    all_stu=[]
    def __init__(self,name,teacher,class_name):
        self.teacher=teacher
        self.name=name
        self.class_name=class_name
        Student.all_stu.append(self)
class Teacher():
    def __init__(self,teacher):
        self.stu_list=[]
        self.class_list=[]
        self.teacher=teacher
    def echo_stu(self):
        for n in Student.all_stu:
            if(self.teacher == n.teacher):
                  self.stu_list.append(n.name)
        print(self.stu_list)
    def echo_class(self):
        for n in Class.all_class:
            if(self.teacher == n.teacher):
                  self.class_list.append(n.name)
        print(self.class_list)
a = Student('a','laowang','c1')
b = Student('b','laowang','c1')
c = Student('c','laoguo','c2')
d = Student('d','laoguo','c2')
c1= Class("c1","laowang")
c2= Class("c2","laoguo")

laowang = Teacher("laowang")
laowang.echo_stu()
laowang.echo_class()

laoguo = Teacher("laoguo")
laoguo.echo_stu()
laoguo.echo_class()

__mro__ c3算法

http://python.jobbole.com/85685/

繼承 覆蓋

class Vehicle:
    def __init__(self,name,brand,date):
        self.name=name
        self.brand=brand
        self.date=date
    def run(self):
        print( "the {} is running".format(self.name))
#對(duì)父類車進(jìn)行繼承
class car(Vehicle):
    def __init__(self,name,brand,date,speed):
        # self.name=name                        #法一 在子類中添加新的參數(shù) 調(diào)用父類初始化化的三種方法
        # self.brand=brand
        # self.date=date
        #Vehicle.__init__(self,name,brand,date) #法二
        super().__init__(name,brand,date)       #法三  python3的方法 且沒有self
        self.speed=speed
    def run(self):  #覆蓋父類的方法
        print("this {} is running speed {}".format(self.name,self.speed))
x6=car("寶馬","x6","070101","200km/h")
x6.run()
print(x6.speed)

#多態(tài)

class Vehicle:
    def __init__(self,name,brand,date):
        self.name=name
        self.brand=brand
        self.date=date
    def run(self):
        print( "the {} is running".format(self.name))
#對(duì)父類車進(jìn)行繼承
class car(Vehicle):
    def __init__(self,name,brand,date,speed):
        super().__init__(name,brand,date)       #法三  python3的方法 且沒有self
        self.speed=speed
    def run(self):  #覆蓋父類的方法
        print("this {} is running speed {}".format(self.name,self.speed))
class bike(Vehicle):
    def __init__(self,name,brand,date,speed):
        super().__init__(name,brand,date)       #法三  python3的方法 且沒有self
        self.speed=speed
    def run(self):  #覆蓋父類的方法
        print("this {} is running speed {}".format(self.name,self.speed))

my_car=car("寶馬","x6","070101","200km/h")
my_bike=bike("保時(shí)捷","x1","070101","20km/h")
def func(obj):       # 為了很好的展示多態(tài)性,還有再借個(gè)函數(shù)
    obj.run()
func(my_car)  
func(my_bike)

# @property, 指 getter 方法
# @name.setter敛纲, 指 setter 方法

class A():
    def __init__(self,name,age):
        self.__name=name    #添加___ 私有屬性
        self.age=age
    @property
    def name(self):
        print("getter 被調(diào)用")
        return self.__name
    @name.setter
    def name(self,__name):
        print("settter 被設(shè)置了")
        self.__name=__name
a = A('shark',19)
a.age =10     #可以改寫age
#a.name="zhu"  #不能改寫 會(huì)報(bào)錯(cuò)
a.name="zhu"
print(a.name)
#print(a.name)
result:
settter 被設(shè)置了
getter 被調(diào)用
zhu

#反射(自饰够鳌)
#模塊是以.py結(jié)尾

class A():
    def __init__(self,name,age):
        self.name=name
        self.age=age
obj=A('xiaoguo',17)
if hasattr(obj,'age'):
    getname=getattr(obj,'name')
    print(getname)
    setage=setattr(obj,'age',18)
    getage=getattr(obj,'age')
    print(getage)
print(A.__dict__)  #只有實(shí)例才有name屬性
print(obj.__dict__)  #只有實(shí)例才有name屬性
#result:
# xiaoguo
# 18
# {'__module__': '__main__', '__init__': <function A.__init__ at 0x00000000021FA840>, '__dict__': <attribute '__dict__' of 'A' objects>, '__weakref__': <attribute '__weakref__' of 'A' objects>, '__doc__': None}
# {'name': 'xiaoguo', 'age': 18}
import cls  #導(dǎo)入上一個(gè)例子模塊 
a= getattr(cls,'A')  #通過反射得到A這個(gè)類
print(a)
obj1 = a("yang",29)
print(getattr(obj1,'name'))
print(isinstance(obj1,a))
# print(globals())

導(dǎo)入包里面的模塊

# from pak import host,main  #法一 pak是個(gè)文件夾里面有host.py,main.py
import sys             #  模塊搜索路徑存儲(chǔ)在 system 模塊的 sys.path 變量中     
import pak.host                     #法二
import pak.main                    #法二
print(sys.path)
print(pak.host.host)
pak.main.connection("zz",80,"gg","root")

導(dǎo)入模塊

from conf import settings     #可以將settins.py放到conf目錄里
host_info={}
from importlib import import_module   #重點(diǎn) 以前沒寫出來卡住了
for key,value in settings.module_dic.items():
     # print(key,'   ',value)
     a,b = value.rsplit('.', 1)
     module_obj = import_module(a)    #***
     # print(module_obj)
     info=(getattr(module_obj,b)())
     host_info[key]=info
print(host_info)

魔術(shù)方法

class Person:
    def __init__(self,name,age):
        self.name=name
        self.age=age
    def __str__(self):
        return "{}---{}".format(self.name,self.age) #要有返回值
obj1=Person("xiaoguo",19)
print(obj1)

抽象類 用于其他類繼承他 被人繼承他就得去實(shí)現(xiàn)他的方法

from abc import ABCMeta,abstractmethod
class chouxiang(metaclass=ABCMeta):
    @abstractmethod
    def get_info(self):
        pass
class a(chouxiang):
    def get_info(self):
        return "hello"
import abc
class chouxiang(metaclass=abc.ABCMeta):
    @abc.abstractclassmethod
    def foo(self):
        pass

paramiko 環(huán)境要裝paramiko

import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
key_obj = paramiko.RSAKey.from_private_key_file('/root/.ssh/id_rsa')
ssh.connect('119.29.175.88',22,'root',pkey=key_obj)
stdin,stdout,stderr = ssh.exec_command('ip a')
res=str(stdout.read(),encoding='utf-8')

paramiko ssh

法1
#實(shí)例化SSHClient
    client = paramiko.SSHClient()
    #自動(dòng)添加策略,保存服務(wù)器的主機(jī)名和密鑰信息
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    #連接SSH服務(wù)端载慈,以用戶名和密碼進(jìn)行認(rèn)證
    client.connect(ip,username=user,password=passwd)
    #打開一個(gè)Channel并執(zhí)行命令
    stdin,stdout,stderr = client.exec_command(command)
    #打印執(zhí)行結(jié)果
    print stdout.readlines()
    #關(guān)閉SSHClient
    client.close()
法2
#實(shí)例化SSHClient
client = paramiko.SSHClient()
#自動(dòng)添加策略惭等,保存服務(wù)器的主機(jī)名和密鑰信息
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
#連接SSH服務(wù)端珍手,以用戶名和密碼進(jìn)行認(rèn)證
client.connect(ip,username=user,password=passwd)
#實(shí)例化Transport办铡,并建立會(huì)話Session
ssh_session = client.get_transport().open_session()
if ssh_session.active:
    ssh_session.exec_command(command)
    print ssh_session.recv(1024)
client.close()

迭代器

TIM截圖20180723113737.png

有限序列變無限序列
from itertools import cycle
counter2 = cycle(['a','b','c'])
for i in range(1,10):
    print(counter2.__next__())
無限序列
from itertools import count
counter = count(start=2)
print(hasattr(counter,'__next__'))
print(hasattr(counter,'__iter__'))
for i in range(1,10):
    print(counter.__next__())

獲取迭代器

def foo():
    for i in range(5):
        yield i
g_obj = foo()
#shengchengqi hanshu
print(hasattr(g_obj,'__iter__'))
print(hasattr(g_obj,'__next__'))
print(next(g_obj))
li_obj = (i for i in range(100000)) #用()產(chǎn)生對(duì)象 里面有算法
print(li_obj)
#list(range(100000)) 延遲算法
def iter1():
    for i in range(10):
        yield i
g =iter1()
g1=(i for i in g)
print(list(g1))
g2=(i for i in g1)
print(list(g2))
result:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[]

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者

  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市琳要,隨后出現(xiàn)的幾起案子寡具,更是在濱河造成了極大的恐慌,老刑警劉巖稚补,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件童叠,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡课幕,警方通過查閱死者的電腦和手機(jī)厦坛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來乍惊,“玉大人杜秸,你說我怎么就攤上這事∪笠铮” “怎么了撬碟?”我有些...
    開封第一講書人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長莉撇。 經(jīng)常有香客問我呢蛤,道長,這世上最難降的妖魔是什么棍郎? 我笑而不...
    開封第一講書人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任其障,我火速辦了婚禮,結(jié)果婚禮上涂佃,老公的妹妹穿的比我還像新娘励翼。我一直安慰自己,他們只是感情好巡李,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開白布抚笔。 她就那樣靜靜地躺著,像睡著了一般侨拦。 火紅的嫁衣襯著肌膚如雪殊橙。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,679評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音膨蛮,去河邊找鬼叠纹。 笑死,一個(gè)胖子當(dāng)著我的面吹牛敞葛,可吹牛的內(nèi)容都是我干的誉察。 我是一名探鬼主播,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼惹谐,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼持偏!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起氨肌,我...
    開封第一講書人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤鸿秆,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后怎囚,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體卿叽,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年恳守,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了考婴。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡催烘,死狀恐怖沥阱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情颗圣,我是刑警寧澤喳钟,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站在岂,受9級(jí)特大地震影響奔则,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蔽午,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一易茬、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧及老,春花似錦抽莱、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至僧鲁,卻和暖如春虐呻,著一層夾襖步出監(jiān)牢的瞬間象泵,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來泰國打工斟叼, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留偶惠,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓朗涩,卻偏偏與公主長得像忽孽,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子谢床,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容