13 面向对象基础-2

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)