美文网首页
Python小白学习进行时---面向对象编程(二)(2018-6

Python小白学习进行时---面向对象编程(二)(2018-6

作者: 晓枫_0544 | 来源:发表于2018-06-27 18:41 被阅读0次

    一、类初始

    对象属性和_ init _方法:
    _ init _方法又叫做构造法。在类创建对象的时候自动调用、初始化对象属性、声明对象属性。
    self默认参数:
    self是类中对象方法默认参数,调用带有默认参数self的方法,系统会自动将当前方法的对象传给self。

    class Person:
        """人"""
        def __init__(self, name='', age=0):
            # 声明对象属性
            self.name = name
            self.age = age
    
        def eat(self):
            print('吃饭')
    
        #  声明一个对象方法run
        def run(self):
            print('self',self)
            #在对象方法中使用对象的属性,直接用self去获取属性
            print('%s跑起来'% (self.name))
            self.eat()
    
    
    #创建一个Person对象
    p1 = Person('小明', 10)
    

    二、属性的增删改查

    1、查

    方式一: 直接通过对象查找属性;对象.属性
    方式二:getattr(对象,属性名,默认值)
    通过方法getattr()获取对象的指定属性。
    注意:1、不设置默认值,属性如果存在,就获取属性的值;如果不存在不,报错。
    2、设置默认值的情况下:属性如果存在就获取属性的值,如果不存在,将默认值作为结果输出

    class Dog:
        """狗🐶"""
    
        # Dog类有name和age两个属性
        def __init__(self, name='', age=0):
            self.name = name
            self.age = age
    dog1 = Dog('才才')
    print(getattr(dog1, 'name', None))
    print(getattr(dog1, 'score', None))
    
    才才
    None
    
    2、修改

    方式一:将新值直接付给对应的属性 ;对象.存在的属性 = 新值

    dog1.name = '大黄'
    

    方式二:setattr(对象,属性名,新值)

    setattr(dog1, 'name', '小黄')
    

    方式三:对象._ setattr_(属性名,新值)

    dog1.__setattr__('name', '小黑')
    
    3、增(对象添加属性)

    Python中可以动态添加属性
    方式一:对象.不存在的属性=值

    dog1.sex = 'nan'
    

    方式二:setattr(对象,不存在的属性名,新值)

    setattr(dog1,'score','100')
    print(dog1.score)
    

    方式三:对象.setattr(不存在属性名,新值)

    dog1.__setattr__('score',100)
    print(dog1.score)
    
    4、删除属性:

    方式一: del 对象.属性

    del dog1.age
    print(dog1.age)  # AttributeError: 'Dog' object has no attribute 'age'
    删除以后再打印age属性会出现报错。
    

    方式二:delattr(对象,属性名)

      delattr(dog1, 'age')
    

    方式三:对象.delattr(属性名)

    dog1.__delattr__('age')
    
    5、判断对象是否拥有某个属性

    方式:hasattr(对象,属性名)
    判断对象是否拥有指定属性
    其返回值为bool值

    result = hasattr(dog1, 'name')
    print(result)
    

    实例:

    1、对象属性的操作只对当前那一个对象有效
    class Person:
        """人"""
        def __init__(self, name='', age=0, id_num='', sex=''):
            self.name = name
            self.age = age
            self.id_num = id_num
            self.sex = sex
    
    
    p1 = Person('小明', 10)
    # 给不存在的属性赋值,就是添加属性
    p1.score = 100
    print(p1.score+100)
    
    del p1.name
    # print(p1.name)
    
    p2 = Person('luo', 30)
    print(p2.name)
    

    注意:
    1.对对象属性的增、删、改、查是针对指定的那个一个对象。不会影响其他的对象
    2.实际开发用的时候,一般只用获取对象属性的值和修改对象属性的值。想要添加和删除属性,一般都是在init方法中去操作

    2、
    class Dog:
            """狗"""
            # 通过给__slots__赋值,可以限制类中对象的属性有哪些,防止一个不必要的属性被添加
        __slots__ = ('name', 'age', 'color')
    
        def __init__(self, name='', age=0, color=''):
            self.name = name
            self.age = age
            self.color = color
            # self.sex = '男'  # AttributeError,因为__slots__中没有'sex'
    
    
    dog1 = Dog('笑话', 3, 'Yellow')
    # dog1.name1 = '大黄'
    # dog1.sex = '男'
    
    del dog1.name
    # 注意:__slots__中规定的属性,只能少不能多。删除属性是不受影响的
    

    6、内置函数

    1.类._ name_ : 获取类的名字(只有类有这个属性)

    class_name = Dog.__name__
    

    2.类.doc : 获取类的说明文档

    print(Dog.__doc__)
    

    3.dict
    类.dict : 获取类中所有的类属性(类字段)和对应的值的键值对 --> 结果是字典
    对象.dict : 以键值对的形式获取指定对象的所有的属性和值

    print(Dog.__dict__)
    
    dog.sex = '男'
    print(dog.__dict__)
    
    1. 类.module : 获取类所在的模块的名字
    print(Dog.__module__, __name__)
    
    1. 类.bases : 获取指定类的基类
    print(Dog.__bases__)

    相关文章

      网友评论

          本文标题:Python小白学习进行时---面向对象编程(二)(2018-6

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