美文网首页
python类进阶3_20160711

python类进阶3_20160711

作者: 潇涵quant | 来源:发表于2016-07-11 19:39 被阅读33次

    首先,来看看isinstance函数,判断实例是不是属于某个类,或其子类,嗯,说明里都有了。

    >>> help(isinstance)
    Help on built-in function isinstance in module builtins:
    
    isinstance(...)
        isinstance(object, class-or-type-or-tuple) -> bool
        
        Return whether an object is an instance of a class or of a subclass thereof.
        With a type as second argument, return whether that is the object's type.
        The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for
        isinstance(x, A) or isinstance(x, B) or ... (etc.).
    
    >>> class C1():
        pass
    
    >>> class C2():
        pass
    
    >>> a = C1()
    >>> b = C2()
    >>> isinstance(a,C1)
    True
    >>> isinstance(b,C1)
    False
    >>> m = 1
    >>> isinstance(m,int)
    True
    

    然后试fomat方法

    # %操作符通过一个更强的格式化方法format()进行了增强。
    #在2.6中,8-bit字符串和Unicode字符串都有一个format()方法,这个方法会把字符串当作一个模版,通过传入的参数进行格式化。这个用来格式化的模版使用大括号({,})作为特殊字符。
    
    # Substitute positional argument 0 into the string.
    >>> a = "User ID: {0}".format('root')
    >>> a
    'User\xa0ID:\xa0root'
    >>> print(a)
    User ID: root
    
    # Use the named keyword arguments
    >>> b = 'User ID:{uid}Last seen:{last_login}'.format(uid='root',last_login = '5 Mar 2008 07:20')
    >>> b
    'User ID:rootLast seen:5 Mar 2008 07:20'
    >>> print(b)
    User ID:rootLast seen:5 Mar 2008 07:20
    
    #大括号可以写两遍来转义。
    >>> c = 'empty dict:{{\'here is a dict\'}}'.format()
    >>> c
    "empty dict:{'here is a dict'}"
    >>> print(c)
    empty dict:{'here is a dict'}
    

    更多内容可以去参考收藏夹“python的函数们”。

    接下来,

    __str__方法返回字符串,在打印时调用
    __repr__ = __str__ 这个等价于
    def __repr__(self):
      return (self.__str__()) #但是这个东西似乎并不是必须的
    

    我们来看一个例子

    class RoundFloat(object):
        def __init__(self,val):
            assert isinstance(val,float),'value must be a float.'
            self.value = round(val,2)
    
        def __str__(self):
            return "{:.2f}".format(self.value)
    
    
        #__repr__ = __str__ #跟下面注释的事项同样功能
    
        #def __repr__(self):
         #  return self.__str__()
    
    if __name__ == '__main__':
        r = RoundFloat(2.136)
        print(r)
        print(type(r))
    

    结果是

    >>> 
    2.14
    <class '__main__.RoundFloat'>
    

    这样,我们基本可以构造自己的数据结构,哦,准确说是定制类(当然还要考虑到__setitem__,__getitem__这些方法啦)。
    下面是这两个方法的使用的例子,其实就是在定义[]的方法。

    >>> class strange():
        def __init__(self,n1,n2):
            self.n1 = n1
            self.n2 = n2
            self.list = list(range(10))
        def __getitem__(self,key):
            if key == 0:
                return self.n1
            elif key == 1:
                return self.n2
        def __setitem__(self,key,value):
            self.list[key] = value
    
            
    >>> stra = strange(3,5)
    >>> stra[1]
    5
    >>> stra[0]
    3
    >>> stra[8] = 9
    >>> stra.list[8]
    9
    

    最后,认识一个表示分数的类,其实现了分数运算和打印。

    >>> from fractions import Fraction
    >>> m,n = Fraction(1,3),Fraction(1,2)
    >>> print(m+n)
    5/6
    >>> print(m*n)
    1/6
    >>> print(m*3)
    1
    >>> print(m-n)
    -1/6
    

    相关文章

      网友评论

          本文标题:python类进阶3_20160711

          本文链接:https://www.haomeiwen.com/subject/ihsjjttx.html