成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

python--面向?qū)ο筮M(jìn)階

Profeel / 2699人閱讀

摘要:它首先被程序語言的設(shè)計(jì)領(lǐng)域所采用并在和面向?qū)ο蠓矫嫒〉昧顺煽?。面向?qū)ο笾械姆瓷渫ㄟ^字符串的形式操作對(duì)象相關(guān)的屬性。注構(gòu)造方法的執(zhí)行是由創(chuàng)建對(duì)象觸發(fā)的,即對(duì)象類名而對(duì)于方法的執(zhí)行是由對(duì)象后加括號(hào)觸發(fā)的,即對(duì)象或者類執(zhí)行執(zhí)行邏輯題

isinstance和issubclass

1.isinstance(obj,cls)檢查是否obj是否是類 cls 的對(duì)象

#!/usr/bin/env python
# -*- coding:utf-8 -*-
class Foo:
    pass
obj = Foo()
print(isinstance(obj,Foo))

2.issubclass(cls,cls)檢查Bar是否是Foo的派生類

#!/usr/bin/env python
# -*- coding:utf-8 -*-
class Foo(object):
    pass
class Bar(Foo):
    pass

print(issubclass(Bar,Foo))
反射

1.反射:
反射的概念是由Smith在1982年首次提出的,主要是指程序可以訪問、檢測和修改它本身狀態(tài)或行為的一種能力(自省)。這一概念的提出很快引發(fā)了計(jì)算機(jī)科學(xué)領(lǐng)域關(guān)于應(yīng)用反射性的研究。它首先被程序語言的設(shè)計(jì)領(lǐng)域所采用,并在Lisp和面向?qū)ο蠓矫嫒〉昧顺煽儭?br>2.python面向?qū)ο笾械姆瓷洌和ㄟ^字符串的形式操作對(duì)象相關(guān)的屬性。python中的一切事物都是對(duì)象(都可以使用反射)四個(gè)可以實(shí)現(xiàn)反射的函數(shù):

def hasattr(*args, **kwargs): # real signature unknown
    """
    Return whether the object has an attribute with the given name.
    
    This is done by calling getattr(obj, name) and catching AttributeError.
    """
    pass

hasattr
def setattr(x, y, v): # real signature unknown; restored from __doc__
    """
    Sets the named attribute on the given object to the specified value.
    
    setattr(x, "y", v) is equivalent to ``x.y = v""
    """
    pass

setattr
def delattr(x, y): # real signature unknown; restored from __doc__
    """
    Deletes the named attribute from the given object.
    
    delattr(x, "y") is equivalent to ``del x.y""
    """
    pass

delattr

應(yīng)用:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
class Foo:
    f = "類的靜態(tài)變量"
    def __init__(self,name,age):
        self.name=name
        self.age=age

    def say_hi(self):
        print("hi,%s"%self.name)

obj=Foo("egon",73)
#1.檢查是否含有某屬性
print(hasattr(obj,"name")) #有該屬性返回True
print(hasattr(obj,"six"))  #無該屬性返回False
#2.獲取該屬性
n = getattr(obj,"name")
print(n)
func = getattr(obj,"say_hi")
func()
#3.設(shè)置屬性
setattr(obj,"sb",True)
setattr(obj,"show_name",lambda self:self.name+"sb")
print(obj.__dict__) #{"name": "egon", "age": 73, "sb": True, "show_name":  at 0x0020C660>}
print(obj.show_name(obj)) #egonsb
#4.刪除屬性
delattr(obj,"age")
delattr(obj,"show_name")
delattr(obj,"show_name111")#不存在,則報(bào)錯(cuò)
print(obj.__dict__)

類也是一種屬性

class Foo(object):
    staticField = "old boy"

    def __init__(self):
        self.name = "wupeiqi"

    def func(self):
        return "func"

    @staticmethod
    def bar():
        return "bar"

print(getattr(Foo,"staticField"))
print(getattr(Foo,"func"))
print(getattr(Foo,"bar"))

模塊:

import sys
def s1():
    print("s1")
def s2():
    print("s2")
this_module = sys.modules[__name__]

print(hasattr(this_module, "s1")) #True
print(getattr(this_module, "s2")) #
__str__和,__repr__

改變對(duì)象的字符串顯示__str__,__repr__
自定制格式化字符串__format__

format_dict={
    "nat":"{obj.name}-{obj.addr}-{obj.type}",#學(xué)校名-學(xué)校地址-學(xué)校類型
    "tna":"{obj.type}:{obj.name}:{obj.addr}",#學(xué)校類型:學(xué)校名:學(xué)校地址
    "tan":"{obj.type}/{obj.addr}/{obj.name}",#學(xué)校類型/學(xué)校地址/學(xué)校名
}
class School:
    def __init__(self,name,addr,type):
        self.name=name
        self.addr=addr
        self.type=type

    def __repr__(self):
        return "School(%s,%s)" %(self.name,self.addr)
    def __str__(self):
        return "(%s,%s)" %(self.name,self.addr)

    def __format__(self, format_spec):
        # if format_spec
        if not format_spec or format_spec not in format_dict:
            format_spec="nat"
        fmt=format_dict[format_spec]
        return fmt.format(obj=self)

s1=School("oldboy1","北京","私立")
print("from repr: ",repr(s1))
print("from str: ",str(s1))
print(s1)

"""
str函數(shù)或者print函數(shù)--->obj.__str__()
repr或者交互式解釋器--->obj.__repr__()
如果__str__沒有被定義,那么就會(huì)使用__repr__來代替輸出
注意:這倆方法的返回值必須是字符串,否則拋出異常
"""
print(format(s1,"nat"))
print(format(s1,"tna"))
print(format(s1,"tan"))
print(format(s1,"asfdasdffd"))
打印結(jié)果:
from repr:  School(oldboy1,北京)
from str:  (oldboy1,北京)
(oldboy1,北京)
oldboy1-北京-私立
私立:oldboy1:北京
私立/北京/oldboy1
oldboy1-北京-私立

%s和%r的區(qū)別

class B:

    def __str__(self):
        return "str : class B"

    def __repr__(self):
        return "repr : class B"
b = B()
print("%s" % b)
print("%r" % b)
#打印結(jié)果為:
str : class B
repr : class B
item
__getitem__\__setitem__\__delitem__
class Foo:
    def __init__(self,name):
        self.name=name

    def __getitem__(self, item):
        print(self.__dict__[item])

    def __setitem__(self, key, value):
        self.__dict__[key]=value
    def __delitem__(self, key):
        print("del obj[key]時(shí),我執(zhí)行")
        self.__dict__.pop(key)
    def __delattr__(self, item):
        print("del obj.key時(shí),我執(zhí)行")
        self.__dict__.pop(item)

f1=Foo("sb")
f1["age"]=18
f1["age1"]=19
del f1.age1
del f1["age"]
f1["name"]="alex"
print(f1.__dict__)
__new__
class A:
    def __init__(self):
        self.x = 1
        print("in init function")
    def __new__(cls, *args, **kwargs):
        print("in new function")
        return object.__new__(A, *args, **kwargs)

a = A()
print(a.x)
class Singleton:
    def __new__(cls, *args, **kw):
        if not hasattr(cls, "_instance"):
            cls._instance = object.__new__(cls, *args, **kw)
        return cls._instance

one = Singleton()
two = Singleton()

two.a = 3
print(one.a)
# 3
# one和two完全相同,可以用id(), ==, is檢測
print(id(one))
# 29097904
print(id(two))
# 29097904
print(one == two)
# True
print(one is two)

單例模式
__call__

對(duì)象后面加括號(hào),觸發(fā)執(zhí)行。
注:構(gòu)造方法的執(zhí)行是由創(chuàng)建對(duì)象觸發(fā)的,即:對(duì)象 = 類名() ;而對(duì)于 call 方法的執(zhí)行是由對(duì)象后加括號(hào)觸發(fā)的,即:對(duì)象() 或者 類()()

class Foo:

    def __init__(self):
        pass
    
    def __call__(self, *args, **kwargs):

        print("__call__")


obj = Foo() # 執(zhí)行 __init__
obj()       # 執(zhí)行 __call__
__len__
class A:
    def __init__(self):
        self.a = 1
        self.b = 2

    def __len__(self):
        return len(self.__dict__)
a = A()
print(len(a))
__hash__
class A:
    def __init__(self):
        self.a = 1
        self.b = 2

    def __hash__(self):
        return hash(str(self.a)+str(self.b))
a = A()
print(hash(a))
__eq__
class A:
    def __init__(self):
        self.a = 1
        self.b = 2

    def __eq__(self,obj):
        if  self.a == obj.a and self.b == obj.b:
            return True
a = A()
b = A()
print(a == b)
邏輯題:
class Person:
    def __init__(self,name,age,sex):
        self.name = name
        self.age = age
        self.sex = sex

    def __hash__(self):
        return hash(self.name+self.sex)

    def __eq__(self, other):
        if self.name == other.name and self.sex == other.sex:return True


p_lst = []
for i in range(84):
    p_lst.append(Person("egon",i,"male"))
#
# print(p_lst)
obj = list(set(p_lst))[0]
print(obj.name,obj.age,obj.sex)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/41983.html

相關(guān)文章

  • 學(xué)習(xí)Python的建議

    摘要:如果初學(xué)者接觸的第一門語言是,學(xué)習(xí)曲線則會(huì)平滑得多,掌握一些基本語法和內(nèi)置的數(shù)據(jù)結(jié)構(gòu),已經(jīng)可以上手寫一些小工具或者小型應(yīng)用。如果你的學(xué)習(xí)時(shí)間充足,我的建議是一定要學(xué)數(shù)據(jù)結(jié)構(gòu)和算法。 前言 Python是最容易入門的編程語言,沒有之一。如果初學(xué)者接觸的第一門語言是C或者C++,對(duì)他們來說最難的不是語法,而是容易出現(xiàn)內(nèi)存泄漏、指針等問題。有時(shí)候排查這些問題對(duì)初學(xué)者的打擊很大,尤其是沒掌握排...

    eechen 評(píng)論0 收藏0
  • Python進(jìn)階:迭代器與迭代器切片

    摘要:本文是切片系列的第三篇,主要內(nèi)容是迭代器切片。實(shí)際上,迭代器必然是可迭代對(duì)象,但可迭代對(duì)象不一定是迭代器。這是迭代器切片最具想象力的用途場景。考慮到文件對(duì)象天然就是迭代器,我們可以使用迭代器切片先行截取,然后再處理,如此效率將大大地提升。 2018-12-31 更新聲明:切片系列文章本是分三篇寫成,現(xiàn)已合并成一篇。合并后,修正了一些嚴(yán)重的錯(cuò)誤(如自定義序列切片的部分),還對(duì)行文結(jié)構(gòu)與章...

    hedge_hog 評(píng)論0 收藏0
  • Python進(jìn)階:迭代器與迭代器切片

    摘要:本文是切片系列的第三篇,主要內(nèi)容是迭代器切片。實(shí)際上,迭代器必然是可迭代對(duì)象,但可迭代對(duì)象不一定是迭代器。這是迭代器切片最具想象力的用途場景??紤]到文件對(duì)象天然就是迭代器,我們可以使用迭代器切片先行截取,然后再處理,如此效率將大大地提升。 2018-12-31 更新聲明:切片系列文章本是分三篇寫成,現(xiàn)已合并成一篇。合并后,修正了一些嚴(yán)重的錯(cuò)誤(如自定義序列切片的部分),還對(duì)行文結(jié)構(gòu)與章...

    omgdog 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<