美文网首页
13 面向对象基础-2

13 面向对象基础-2

作者: 卅月 | 来源:发表于2018-08-01 17:33 被阅读0次

    1.内置的类属性

    • name
      类._ _ name _ _  获取类的名字
    • doc
      类._ _ doc_ _  获取类的文档说明
    • dict
      类._ _ dict_   获取类中所有的类属性和对应的值,以键值对的形式存到字典里
      对象.
      _ dict_ _  获取对象中所有的属性,以键值对的形式存到字典(常用的方法)
    • moudle
      类._ _ moudle_ _  获取当前类所在的模块的名字
    • bases
      类._ _ bases_ _  获取当前类的父类

    2.私有化

    (1)在python中类中的属性和方法的私有化:-->直接在属性名或者方法前加_ _
    (2)属性或者方法的私有化的结果:-->在外部不能直接使用,但是可以在内部使用
    如:

    class Person:
        """人类"""
        __number = 40       # 私有字段
    
        def __init__(self, name='', age=0):
            self.name = name
            self.__age = age    # 私有属性
        def __run(self):      # 私有方法
            print('%s再跑' % self.name)
    

    3.getter和setter

    概念:

    属性假的私有化:如果对于对象的某个属性不希望别人直接拿来用,但是后面又需要改动的时候,这时候就可以在属性前面加个_.这个属性获取和改动的时候就需要通过gatter和setter.
    (1)getter:获取属性的值

    @property
    def 属性名(self):
      return self._属性名
    

    (2)setter:给属性赋值

    @属性名.setter
    def 属性名(self, value):
      self._属性名 = value
    

    如:

    class Student:
        """学生类"""
        def __init__(self):
            """
            声明属性的时候前面加一个'_'是为了告诉别人这个属性不能直接使用
            """
            self._name = ''
            self._score = 0
            self._age = 0
        # 给属性_name添加getter
        @property
        def name(self):
            return self._name
    
        # 给属性_name添加setter
        @name.setter
        def name(self, value):
            self._name = value
    
    if __name__ == '__main__':
        stu1 = Student()
        stu1.name = 'sjk'
        print(stu1.name)
        print(stu1.__dict__)
    
    #输出
    sjk
    {'_name': 'sjk', '_score': 0, '_age': 0}
    

    4.继承

    继承方法:

    class 类名(父类):
      属性
      方法
    
    • (1)继承基础
      python中类是可以继承的,并且支持多继承(一般都只是单继承)
    • (2)python中所有的类默认继承python的object类.(基类)
    • (3)能继承的内容:(直接拥有父类的属性和方法,继承后父类的属性和方法还是存在的)
        a.对象的属性和方法,类的字段和类方法,静态方法都可以继承(私有的继承无意义--不能继承)
        b.slots(属性约束)的值不会继承
        c.getter和setter可以继承

    如:

    class Person:
        """人类"""
        def __init__(self):
            self.name = ''
            self.age = 0
            self.sex = '男'
            self.__length = 0
            self._face = 9
    
        def eat(self):
            print('%s 在吃饭' % self.name)
    
        # 类字段
        number = 61
    
        @classmethod
        def get_number(cls):
            print('人的数量:%d' % cls.number)
    
        @staticmethod
        def hurt_earth():
            print('人类破坏地球')
    
    
    class Student(Person):
        """学生类"""
        pass
    
    
    if __name__ == '__main__':
        stu = Student()
        stu.name = '小敏'
        stu.sex = '女'
        print(stu.__dict__)
        print(stu.eat())
        print(stu._face)
    
    Student.hurt_earth()
    
    
    #输出
    {'name': '小敏', 'age': 0, 'sex': '女', '_Person__length': 0, '_face': 9}
    小敏 在吃饭
    None
    9
    人类破坏地球
    

    相关文章

      网友评论

          本文标题:13 面向对象基础-2

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