美文网首页
day13 面向对象基础Ⅱ 2018-08-01

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

作者: LPP27149 | 来源:发表于2018-08-01 18:46 被阅读0次

一、内置类属性

  内置类属性:

    __name__
    __doc__
    __dict__
    __module__
    __bases__

    1. 类.__name__:获取类的名字(字符串)
    1. 类.__doc__: 获取说明文档
    1. ①. 类.__dict__: 获取类中所有的类属性和对应的值, 以键值对的形式存到字典中
      ②. 对象.__dict__: 将对象的属性和对应的值, 转换成字典的元素(常用, 牢记)
    1. 类.__module.__: 获取当前类所在的模块的名字(在运行的模块名会变成__main__)
    1. 类.__bases__: 获取当前类的父类名称

二、私有化

  • python中类中的属性和方法的私有化:直接在属性名或者方法名前加__(命名以'__'开头)
  • 属性或者方法私有: 在外部不能直接使用, 可以在类的内部使用
  • 私有化的原理: 在内部私有的名字前加了前缀'_类名'

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里面的内容)

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

相关文章

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

    一、内置类属性   内置类属性:     __name__    __doc__    __dict__    _...

  • Day13 面向对象基础2

    01.内置类属性 02.私有化 03.getter 和 setter 04.练习 05.类的继承 01.内置类属性...

  • day13 面向对象基础2

    01 内置类属性 内置类属性:python中每个类都拥有内置的类属性 __name____doc____dict_...

  • 2018-08-01 day13 面向对象(进阶)

    内置类属性 内置类属性:python中每个类都拥有内置的类属性 _name_ _doc_ _dict_ _modu...

  • java SE目录

    java SE目录 java基础(一)java基础(二)关键字面向对象(一)面向对象(二)面向对象(三)集合(一)...

  • Java基础03面向对象

    Java 基础02Java编程基础 面向对象上 面向对象的概述 面向对象的概述:面向对象是一种符号人类思维习惯的编...

  • python面向对象学习笔记-01

    学习笔记 # 0,OOP-Python面向对象 - Python的面向对象 - 面向对象编程 - 基础 -...

  • java基础回顾(2)

    面向对象:是基于面向过程的一种思想。 面向过程:以函数为基础,关注实现过程。 面向对象:以对象为基础,关注实现结果...

  • 面向对象

    title:面向对象tags: 基础,Java 面向对象 面向对象程序设计简介 面向对象的基本思想是使用类、对象、...

  • "类"的讲稿

    -----------------------面向对象基础----------------------------...

网友评论

      本文标题:day13 面向对象基础Ⅱ 2018-08-01

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