day13 面向对象基础Ⅱ 2018-08-01

2018-08-01  本文已影响0人  LPP27149

一、内置类属性

  内置类属性:

    __name__
    __doc__
    __dict__
    __module__
    __bases__

二、私有化


class Person:
    __number = 90  # 私有的类字段

    def __init__(self, name='', age=0):
        self.name = name
        self.__age = age

    def __show_age(self):
        print(self.__age)
    # 私有方法,只能在内部调用
    def p(self):
        self.__show_age()


if __name__ == '__main__':
    p1 = Person('皮卡丘', 12)
    p1.name = '胖丁'
    p1.p()
    # p1.age = 3
    # print(p1.name, p1.__age)
    print(Person.__dict__)

三、getter和setter

  属性假的私有化: 声明对象属性的时候, 在属性名前面加一个'_',来告诉别人这个属性不可以直接使用, 要通过getter和setter来获取和修改属性的值

1. getter :

  @property
  def 属性名(去掉下划线)(self):
     return 返回值

如果在获取对象的某个属性前需要对其做一些处理而不是直接呈现, 就需要给属性添加getter

2. setter : 给属性赋值

一个属性必须要有getter, 才能添加setter。
  @属性名(去掉下划线).setter
  def 属性名(去掉下划线)(self, 变量名):
    给带下划线的属性赋值

如果在给对象的某个属性赋值之前对其做一些处理而不是直接呈现, 就需要给属性添加setter

class Student:
    """学生类"""
    def __init__(self, name, score, age):
        # 声明属性的时候,前面加一个下划线, 是为了告诉别人这个属性不能直接使用
        self._name = name
        self._score = score
        self._age = age

    # 给属性_name添加setter
    @property
    def name(self):
        return self._name

    # 给属性_name添加setter
    @name.setter
    def name(self, value):
        self._name = value

    @property
    def score(self):
        return self._score

    @score.setter
    def score(self, value):
        self._score = value
        return self._score

    @property
    def age(self):
        return self._age

    @age.setter
    def age(self, value):
        if value > 150 or value <= 0:
            print('请输入合理的值')
            # 抛出异常
            # raise ValueError
        else:
            self._age = value
            return self._age

if __name__ == '__main__':
    stu1 = Student('①', 90, 15)
    # 不添加getter和setter
    stu1._name = '派大星'
    print(stu1._name)

    # 添加getter和setter
    stu1.name = '张三'
    print(stu1.name)

    stu1.age = 200
    stu1.age = 20
    print(stu1.age)

派大星
张三
请输入合理的值
20


四、类的继承

子类: 继承者
父类(超类): 被继承者

1. 怎么继承

  python中类是可以继承的, 并且支持多继承

  class 类名(父类):
  '''类的说明文档'''
     属性
     方法

说明: python中所有的类默认继承python的基类: object

2. 能继承哪些内容

继承: 直接拥有父类的属性和方法(继承后父类的属性和方法不受影响)

a. 对象的属性和方法, 类的字段和方法, 静态方法都可以继承(私有的继承无意义--不能继承)
b. __slots__不会被继承
c. getter和setter会被继承
class Person:
    number = 56

    def __init__(self):
        self.name = ''
        self.age = 0
        self.gender = '男'
        self.__length = 1.8

    def eat(self):
        print('我王境泽就是饿死,死外边,从这里跳下去,也不会吃你们一口饭')
        print('嗯 真香!')

    @classmethod
    def get_number(cls):
        print('%.f' % cls.number)


class Student(Person):
    pass


if __name__ == '__main__':
    stu = Student()
    stu.eat()
    print(stu)

这里并没有在Student类中写任何函数, 输出的是父类(Person里面的内容)

我王境泽就是饿死,死外边,从这里跳下去,也不会吃你们一口饭
嗯 真香!

上一篇 下一篇

猜你喜欢

热点阅读