美文网首页
Python类属性和实例属性

Python类属性和实例属性

作者: Bug之王 | 来源:发表于2018-04-27 23:28 被阅读0次

    两种属性的语法

    class WhiteCat(Animal):
        # 类属性  
        color = 'white'
        type = 'cat'
        def __init__(self, name):
            # 给刚生成的实例绑定属性
            self.name = name
    myWhiteCat = WhiteCat('mimi')
    # 给实例绑定属性
    myWhiteCat.sex = 'girl'
    

    类实例的访问

    类实例可以通过类访问也可以通过实例访问

    >>> WhiteCat.color
    'white'
    >>> myWhiteCat.color
    'white'
    

    赋值操作是需要特别注意的

    >>> WhiteCat.color = 'red'
    >>> WhiteCat.color
    'red'
    >>> myWhiteCat.color = 'blue'
    >>> WhiteCat.color
    'red'
    >>> myWhiteCat.color
    'blue
    

    可以发现,当我们试图通过实例给类属性赋值时,实际上给实例绑定了一个和类属性同名的实例属性。

    当类属性是可变对象时,情况好像有不一样

    >>> class WhiteCat(object):
    ...        describle = {'type': 'cat', 'color': 'white'}
    ...
    >>> myCat = WhiteCat()
    >>> myCat .describle['color'] = 'red'
    >>> WhiteCat.describle
    {'type': 'cat', 'color': 'red'}
    

    可以发现通过实例改变类属性时成功地改变了。

    Python中给变量赋值和申明变量并初始化在语法上时完全一样的,试图通过实例给类属性重新赋值时,会被认为给实例绑定了一个新的实例属性;但是当通过实例操作类属性时(操作这个概念包括直接获得类属性值,通过方法或索引获得类属性的值,通过索引和方法改变类属性的值),会试图寻找同名的实例属性,如果没有找到,则寻找类属性。

    相关文章

      网友评论

          本文标题:Python类属性和实例属性

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