0
点赞
收藏
分享

微信扫一扫

3.8-面向对象和json

哈哈镜6567 2022-03-12 阅读 80
python

面向对象和json练习

编程思想

1.面向过程编程(穷人思想)
遇到问题马上想到的是解决问题的步骤和方案
工具:思路+语法
2.函数式编程(小资思想)
遇到问题马上想到的是是否已经存在一个函数具备解决问题的能力,如有直接用,没有就造一个
工具:函数
3.面向对象编程(富豪思想)
遇到问题马上想到的是有没有一个对象具备这个功能,有就直接用,没有就创建这个对象(创建对象还要看有没有类)
工具:类和对象

类和对象

1.认识类和对象
类:类是具有相同功能和相同属性的对象的集合(一类事物的总称) - 抽象的概念
对象:类的实例(类的具体表现)
2.定义类
创建类就是用代码来描述清楚这个类有哪些相同功能(函数)和哪些相同属性(保存数据的变量)的对象的集合

语法:
class 类名:
    类的说明文档
    类的内容(方法,属性)

说明:
class      - 关键字;固定写法
类名        - 由程序员命名
              要求:是标识符;不能是关键字
              规范:见名知义;驼峰命名法,并且首字母大写;不使用系统已经使用的名字
:         - 固定写法
类的说明文档 - 本质就是多行注释
类的内容    - 由方法和属性组成,方法分为对象、类和静态方法三种;属性分为类、对象属性两种
             方法就是定义在类中的函数,属性就是定义在类中的变量

3.创建对象

对象又叫实例
语法:
对象名 = 类名()

对象方法

1.方法 - 定义在类中的函数
1.1.对象方法
1)怎么定义:将函数直接定义在类中
2)怎么调用:用'对象.'的方式调用
3)特点: 自带参数self,在通过对象调用对象方法的时候,参数self不用传参,系统自动将当前对象传给self
        self是谁调用就指向谁

1.2.类方法
1)怎么定义:在定义函数前加装饰器@classmethod   
2)怎么调用:用'类.'的方式调用
3)特点:自带参数cls,在通过类名调用类方法的时候,参数cls不用传参,系统自动将当前类传给cls


1.3.静态方法
1)怎么定义:在定义函数前加装饰器@staticmethod 
2)怎么调用: 用'类.'的方式调用
3)特点:无

常用的魔法方法

1.魔法方法:类中两个下划线开头并以两个下划线结尾,还会在特定情况下自动调用的方法
2.常用魔法方法:
    1)__init__
    在通过类创建对象时,会被自动调用
    创建函数时需不需要参数,需要几个,看这个类的__init__方法除了self以外有没没有额外的参数,有几个
    2) __repr__
    在打印类的对象时自动调用类中__repr__方法,并且获取这个方法的返回值为打印结果(返回值是字符串)

方法的选择

对象方法:如果实现函数的功能需要对象,就使用对象方法
类方法:实现函数的功能不需要对象的前提下,需要类就使用类方法
静态方法:既不需要类,也不需要对象(多用于分类)

属性

1.属性
定义类就是用部分代码描述清楚这个类有哪些相同功能和相同属性的集合,方法(函数)用来描述相同的功能,属性用来描述相同的属性。
属性分为两种:类属性,对象属性
(1)类属性
a.怎么定义:直接定义在类中的属性
b.怎么使用:通过'类.'的方式去使用
c.什么时候使用:如果属性值不会因为对象不同而不一样的时候

(2)对象方法
a.怎么定义:以'self.属性名=值'的方式定义在__init__方法中
b.怎么使用:通过'对象.'的方式去使用
c.什么时候使用:如果属性值会因为对象不同而不一样的时候


#2.对象属性默认值
1)赋一个固定的值:没吃创建对象时不能重新赋值,只能在创建好对象以后修改属性的值
2)使用没有默认值的参数赋值


3.self的使用
在对象方法中,self是谁调用就指向谁,所以在对象中可以直接将self当成对象来使用。(这个类的对象能做的事情self都可以做)

继承

继承就是让子类直接拥有父类的属性和方法
1.直接继承

子类: -  继承者
父类: -  被继承者

语法:
class 类名(父类列表):
    类的说明文档
    类的内容

注意:如果定义类的时候没有写父类,那么默认继承object

2.在子类中继承

1)添加类属性和方法
直接在子类中定义新的类属性和新的方法

2)添加对象属性
super(). 重复时可继承父类的对象属性

3.多继承可以继承所有的父类的方法和属性,只能继承第一个父类的对象属性

json

1.json数据
json是一种通用的数据格式,主要用于不同语言之间进行有效的数据沟通。

2.json数据的格式
要求:
(1)一个json有且只有一个数据
(2)唯一的这个数据必须是json支持的数据类型

json支持的类型:
1.数字 —— 数字直接写,并且支持科学计数法,例如:67,1.23,-12,3e5
2.字符串 —— 只能使用双引号,支持转义字符,例如:“abc”,“abc\n123”
3.布尔值 —— 只有true和false两个值
4.空值 —— null
5.数组 —— 相当于python的列表,[元素1,元素2,…]
6.字典 —— 相当于python的字典,但是键只能是字符串

3.python数据和json数据的相互转化
json模块中提供了python中所有和json操作相关的函数

(1)json转python
import json
json,loads(json格式字符) —— 将json格式字符串对应的json数据转化为相应的python数据
注:json格式字符串——指的是字符串内容是json的字符串

(2)python转json
json.dumps(python数据) —— 将指定的python数据转换成json格式字符串

import json
result=json.loads(open(’.\files\汽车新闻.json’,encoding=‘utf-8’).read())
for x in result[“newslist”]:
print(x[‘title’])

面向对象和json练习

  1. 定义一个狗类和一个人类:

    狗拥有属性:姓名、性别和品种 拥有方法:叫唤

    人类拥有属性:姓名、年龄、狗 拥有方法:遛狗

    class Dog:
        def __init__(self, name, gender, breed):
            self.name = name
            self.gender = gender
            self.breed = breed
    
        def bark(self):
            return '叫唤'
    class Person:
        def __init__(self, name, age, dog):
            self.name = name
            self.age = age
            self.dog = dog
            
        def WalkDog(self):
            return '遛狗'
    
  2. 定义一个矩形类,拥有属性:长、宽 拥有方法:求周长、求面积

    class Rech:
        def __init__(self, length, width):
            self.length = length
            self.width = width
    
        def S(self):
            return self.width*self.length
    
        def C(self):
            return (self.width+self.length)*2
    
  3. 定义一个二维点类,拥有属性:x坐标、y坐标 拥有方法:求当前点到另外一个点的距离

    class Point:
        def __init__(self, x, y):
            self.x = x
            self.y = y
    
        def distance(self, a, b):
            return ((self.x-a)**2+(self.y-b)**2)**0.5
    
  4. 定义一个圆类,拥有属性:半径、圆心 拥有方法:求圆的周长和面积、判断当前圆和另一个圆是否外切

    class Circle:
        pi = 3.14
        def __init__(self, r, point=(0,0)):
            self.r = r
            self.p = point
    
        def S(self):
            return pi * self.r**2
    
        def C(self):
            return pi * self.r * 2
    
        def touch(self, r1, x1, y1):
            if ((self.p[0]-x1)**2+(self.[1]-y1)**2)**0.5 == self.r+r1:
                return True
            else:
                return False
    
  5. 定义一个线段类,拥有属性:起点和终点, 拥有方法:获取线段的长度

    class lines:
        def __init__(self, a, b, c, d):
            self.s = (a,b)
            self.e = (c,d)
    
        def length(self):
            return ((self.s[0]-self.e[0])**2+(self.s[1]-self.e[1]))**0.5
     
    
举报

相关推荐

0 条评论