美文网首页ITS·黑客
[python]面向对象编程DAY2

[python]面向对象编程DAY2

作者: JEZAU | 来源:发表于2017-04-10 20:40 被阅读0次

    补上篇:

    定义实例:
    实例名 = 类名.(除了self以外的所有参数)
    def __init__中设置的参数都是在定义实例的时候输入的,因此算作实例的属性

    定义类属性:直接在class下面输入如 name = 'student'
    然后类中所有的实例均可以调用类属性 实例名.类属性名
    也可以直接用类来调用 类名.类属性名
    由于实例属性优先级比类属性高,因此,定义了实力属性以后会覆盖类属性
    但是当你删除实例属性后,再使用相同的名称,访问到的将是类属性。
    (如何删除??)

    调用属性:

    >>> class a(object):
    ...     def __init__(self,name):
    ...             self.name = name
    ...
    >>> lalala = a(la)
    Traceback (most recent call last):  File "<stdin>", line 1, in <module>NameError: name 'la' is not defined```
    
    `__init__`中的`name`等属性系统有自动的识别,输入必须是str类型
    
    -----
    查看数据类型:`type(a)`,此时显示的都是**最小的子类**
    但其实通过继承,也属于所有的父类,所以可以用`isinstance(a,type)`来判断
    
    类似`__xxx__`的属性和方法在Python中都是有特殊用途的,比如`__len__`方法返回长度。
    在Python中,如果你调用`len()`函数试图获取一个对象的长度,实际上,在len()函数内部,它定义了去调用该对象的`__len__()`方法。
    
    **对某些函数理解:**
    函数len()的定义内部调用`__len__`,如果你的类内部没有`__len__`方法,则不可以使用`len()`调用类,你也可以为自己的函数内部定义一个`__len__`方法,然后使用`len()`函数后会调用你定义的方法。
    
    -------
    
    

    hasattr(obj, 'x') # 有属性'x'吗?
    getattr(obj, 'x') #获得属性'x'
    setattr(obj, 'y',值) # 设置一个属性'y'

    属性名一定是string类型
    `getattr()`在已知如何直接调用函数内部属性的情况下不需要这样写,如
    `obj.x`
    
    如果试图获取不存在的属性,会抛出AttributeError的错误:
    

    getattr(obj, 'z')
    Traceback (most recent call last): File "<stdin>", line 1, in <module>AttributeError: 'MyObject' object has no attribute ‘z’

    
    可以传入一个default参数,如果属性不存在,就返回默认值:
    

    getattr(obj, 'z', 404) # 获取属性'z',如果不存在,返回默认值404```

    相关文章

      网友评论

        本文标题:[python]面向对象编程DAY2

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