美文网首页
Day12-面向对象

Day12-面向对象

作者: 周zau1 | 来源:发表于2018-08-01 17:25 被阅读40次

1、内置类属性


Python中每个类都拥有内置的类属性

  • . __ name __
    获取类的名字
  • . __ doc __
    获取类的说明文档
class Xxx:
    """说明文档"""
  • . __ dict __
    获取类中所有的类属性和对应的值,以键值对的形式存到字典里面
    对象 . __ dict __
    将对象的属性和对应的值,转换成字典的元素(常用)
  • . __ modle __
    获取当前类所在的模块的名字
  • . __ bases __
    获取当前类的父类

2、私有化


python 中类的属性和方法的私有化:直接在属性名或者方法名前加__
属性或者方法私有:在外部不能直接使用,可以在类的内部使用

3、getter 和 setter


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

getter:获取属性的值

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

如果在获取对象的某个属性前需要在干点别的事情,就给属性添加geter

setter:给属性赋值
一个属性必须要有getter,才能添加setter。

@属性名(去掉下划线),serer
def 属性名去掉下划线(self, 变量名):
    给带下划线的属性赋值

如果在给对象的某个属性赋值前需要在干点别的事情,就给属性添加seter

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

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




if __name__ == '__main__':
    stu1= Student()
    # 不添加getter 和 setter
    # stu1._name = '张三'

    # 添加getter 和 setter
    stu1.name = '李四'
    print(stu1.name)

4、类的继承


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

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

class 类名(父类列表):
    '''类的说明'''
    属性
    方法

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

继承:直接拥有父类的属性和方法(继承后父类依然有属性和方法)
a.对象的属性和方法、类的字段和类方法、静态方法都可以继承(私有的继承无意义,可以看做不能继承)
b. __ slots __ 的值不会被继承
c. getter 和 setter 会被继承

5、小练习


# Jay
import json
# 获取数据
def download_data():
    with open('./data.json', 'r', encoding='utf-8') as f:
        return json.loads(f.read())['data']

class Data:
    """数据类"""
    def __init__(self):
        self.type = ''
        self.text = ''
        self.user_id = ''
        self.name = ''
        self.screen_name = ''
        self._width = 0
        self._height = 0
        self._themes = None

    #  _width 的 getter 和 setter
    @property
    def width(self):
        return self._width
    @width.setter
    def width(self, width):
        self._width = int(width)

    #  _height 的 getter 和 setter
    @property
    def height(self):
        return self._height
    @height.setter
    def height(self, height):
        self._height = int(height)

    @property
    def themes(self):
        if not self._themes:
            return '无'
        return self._themes

    # 根据字典创建对象
    @classmethod
    def creat_data(cls, dict1):
        data = cls()
        for key in dict1:
            # 处理特殊情况
            if key == 'width':
                data.width = dict1[key]
                continue
            if key == 'height':
                data.height = dict1[key]
                continue
            if key == 'themes':
                data._themes = dict1[key]
                continue
            # 存储所有的值
            data.__setattr__(key, dict1[key])

        return data

if __name__ == '__main__':
    print(download_data())
    datas = []
    for dict1 in download_data():
        # 通过字典创建对象
        data = Data.creat_data(dict1)
        # 将创建的对象存起来
        datas.append(data)
    # 取值
    print(datas[0].text)

相关文章

  • Day12-面向对象

    1.迭代器和生成器 2.认识面向对象 1.什么是类:对拥有相同属性和功能的对象的封装类是抽象类中相同的属性的值是不...

  • day12-面向对象

    1、迭代器,生成器 生成器 a.可以看成是一个可以存储多个数据的容器。需要里面的数据的时候就生成一个数据,里面的数...

  • Day12-面向对象

    1、内置类属性 Python中每个类都拥有内置的类属性 类 . __ name __获取类的名字 类 . __ d...

  • day12-面向对象

    一、迭代器和生成器 生成器: a.可以看成是一个可以存储多个数据的容器。需要里面数据的时候就生成一个里面的数据只能...

  • day12-面向对象基础

    1. 迭代器和生成器 生成器:a. 可以看成一个可以存储多个数据的容器。需要里面的数据的时候就生成一个,里面的数据...

  • day12-面向对象基础

    01-迭代器和生成器 生成器:a.可以看成是一个可以存储多个数据的容器。需要里面的数据的时候就生成一个,里面的数据...

  • PHP全栈学习笔记8

    面向对象的基本概念,面向对象编程,oop,面向对象,面向对象的分析,面向对象的设计,面向对象的编程,什么是类。 类...

  • PHP全栈学习笔记8

    面向对象的基本概念,面向对象编程,oop,面向对象,面向对象的分析,面向对象的设计,面向对象的编程,什么是类。 类...

  • 总结.Net基础知识——献给即将入坑的同行们(一期)

    什么是面向对象 面向对象OO = 面向对象的分析OOA + 面向对象的设计OOD + 面向对象的编程OOP; 通俗...

  • 面向对象基础

    面向对象编程包括: 面向对象的分析(OOA) 面向对象的设计(OOD) 面向对象的编程实现(OOP) 面向对象思想...

网友评论

      本文标题:Day12-面向对象

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