美文网首页
类的对象属性和init方法

类的对象属性和init方法

作者: 丫丫姑娘_b55e | 来源:发表于2018-06-27 19:41 被阅读0次

    class 类名:
        属性
        方法
    实例一:init方法会自动被调用
    class Person:

    • _ _ init_ _方法又叫构造方法。是在通过类创建对象的时候,自动调用的方法。
    • _ _ init_ _方法的作用就是在创建对象的时候初始化对象的属性
    • _ _ init_ 方法:对象的属性就是声明在这个方法中
      def _ _ init
      _(self):
      在这个地方声明对象的属性
      声明对象的时候会自动调用init方法
      p1 = Person
      p2 = Person

    实例二:带参的init方法

    class Dog:
           """狗"""
           def _ _ init_ _(self,name=""):
    print('名字是:%s'%(name))

    • 通过类创建对象的时候,要保证init方法里面的每一个参数都有值。通过给类名后面的括号里传参来保证
      dog1 = Dog ('才才')
      dog2 = Dog(name = '旺财‘)
      实例三:对象属性
      属性:声明在类中的变量
      对象属性:要通过对象去使用;不同的对象可能会有不同的值,声明在init方法中的变量

      class Person2:
            """人类"""
            #在init方法中声明对象属性:self.属性名 = 初值
            def _ _init_ _(self):
                      self.name = '无名氏'
                      #声明了一个对象属性,初始值为空串
                      self.age = 10
      

    通过Person2类创建对象p1
    p1 = Person2()
    通过p1对象去修改p1的name属性
    p1.name = '张三'
    实例四:创建对象的时候赋初值

    class Student2:
        def _ _init _ _(self,name1=' ' , age1 = 0, tel = ' '):
        self.name = name1
        self.age = age1
        self .tel = tel1
    stu2 = Student2('小明',18 , '112')

    self

    类中的对象方法都有一个默认参数self:

    1. 调用带有默认参数self的方法,不需要给self传参。系统会自动将调用当前方法的对象传给self

    2. 在方法中使用self就相当于使用调用方法的对象(只能使用self,不能重新给self赋值)

       class Person:
               """人"""
               def _ _init_ _(self, name='', age=0):
               # 声明对象属性
               self.name = name
               self.age = age
               def eat(self):
                      print('吃饭')
               def run(self):
                      print('self',self)
                      print('%s跑起来'%(self.name)
                      self.eat()
      

    创建一个Person对象

    练习:声明一个圆类, 拥有属性:半径 拥有方法: 计算圆的面积、计算圆的周长
    from math import pi
    class Circle:
    """ 圆"""
    def _ _init_ _(self,radius=0);
      self.radiius = radius
    def area():
     return pi*self.radius**2
    def girth():
      return 2*pi*self.radius
    c1 = Circle(10)
    print('%.2f'%c1.area())
    
    属性的增删改查
    class Dog:
    """狗🐶"""
    # Dog类有name和age两个属性
    def __init__(self, name='', age=0):
        self.name = name
        self.age = age
    dog1 = Dog('才才')
    

    1.查
    方式1: 对象.属性
    特点:如果属性存在就获取属性的值。如果属性不存在就会报AttributeError错误
    方式2:getattr(对象, 属性名, 默认值)
    --> 获取指定对象的指定属性
    如果不设置默认值: 属性如果存在就获取属性的值;不存在就报错
    如果设置默认值:属性如果存在就获取属性的值;属性不存在的时候,不报错,并将默认值作为结果
    方式3:对象.getattribute(属性名)
    获取指定对象的指定属性。如果属性不存在就会报错

    print(dog1.name)
    print(getattr(dog1,'name,None)
    print(dog1._ getattribute _('name')

    2.改
    方式1: 对象.存在的属性 = 新值
    方式2:setattr(对象, 属性名, 新值)
    方式3:对象.setattr(属性名, 新值)

    dog1.name = '大黄'
    print(dog1.name)
    setattr(dog1,'name','小黄')
    dog1._ setattr _('name','小黑')

    3.增(对象添加属性)
    方式1:对象.不存在的属性 = 值
    方式2:setattr(对象, 不存在的属性名, 新值)
    方式3:对象._ setattr _(不存在的属性名, 新值)
    dog1.sex = '男'
    print(dog1.sex)

    setattr(dog1, 'score', 100)
    print(dog1.score)
    4.删除属性
    方式1:del 对象.属性
    方式2:delattr(对象, 属性名)
    方式3:对象.delattr(属性名)

    del dog1.age
    delattr(dog1, 'age')
    dog1._ delattr _('age')

    5.判断对象是否拥有某个属性
    方式:hasattr(对象, 属性名) ---> 判断指定的对象是否拥有指定的属性
    result = hasattr(dog1 ,'name')
    print(result)
    注意:1.对对象属性的增、删、改、查是针对指定的那个一个对象。不会影响其他的对象
    2.实际开发用的时候,一般只用获取对象属性的值和修改对象属性的值。想要添加和删除属性,一般都是在init方法中去操作

    • 通过给 _ slots 赋值,可以限制类中对象的属性有哪些,防止一个不必要的属性被添加
      slots = ('name', 'age', 'color')
      注意:
      slots _中规定的属性,只能少不能多。删除属性是不受影响的

    内置类属性

    • 内置的类属性是属于类的,需要通过类去使用
      1.类._ name _ : 获取类的名字(只有类有这个属性)
      2.类._ doc _ : 获取类的说明文档
      3._ dict _
      类._ dict _ : 获取类中所有的类属性(类字段)和对应的值的键值对 --> 结果是字典
      对象._ dict _ : 以键值对的形式获取指定对象的所有的属性和值
      类._ module _ : 获取类所在的模块的名字
      类._ bases _ : 获取指定类的基类

    相关文章

      网友评论

          本文标题:类的对象属性和init方法

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