day3.08

day3.08-面向对象和json

1. 属性

属性

'''
定义类就是用代码描述清楚这个类拥有那些相同功能和相同属性的集合,方法(函数)是用来描述相同功能
属性(变量)用来描述相同属性

属性分为两种:类属性、对象属性

1)类属性:
a. 怎么定义:直接定义在类中的变量就是类属性
b. 怎么使用:通过'类.'的方法去使用
c.什么时候用:如果属性值不会因为对象不同而不一样的时候

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


'''
import math

class Circle:
    pi = math.pi
    def __init__(self,radius):
        self.radius =radius
        # print(0)
print(Circle.pi)
a = Circle(3)
print(a)

对象属性默认值

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

'''

self的应用

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


'''
# 练习:定义一个矩形类,又长和宽两个属性,有求面积和周长两个方法
print('================')
class Rectangle:
    def __init__(self,wide,long):
        self.wide = wide
        self.long = long
        area = self.long * self.wide
        perimeter = self.long * 2 + self.wide * 2
        print(area,perimeter)
x = Rectangle(3,4)

方法的选择

'''
对象方法:如果实现函数的功能需要对象(需要对象属性)就用对象方法
类方法:在实现函数的功能不需要对象(或者对象属性)的前提下,需要类就是用类方法
静态方法:既不需要类也不需要对象

'''

2. 继承

继承

'''
继承让子类直接拥有父类的属性和方法
子类  -   继承者
父类(超类)  -   被继承者

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

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

'''
class Person:
    a1 = 100
    def __init__(self):
        self.name = '小明'
        self.age = 18
        self.gender = '男'
    def __repr__(self):
        return str(self.__dict__)       # !!!!!!!!!!!!!

'''
    def __repr__(self):
        return str(self.__dict__) 
将__init__()中的全部打印出来
'''

class Students(Person):
    def __init__(self):
        super().__init__()  # 调用父类的__init__()
        self.hight = 170

# a = Students()
# print(a.name)
# print(a)

在子类中添加内容

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

2)添加对象属性

super().__init__()       -      调用父类中的__init__()函数
'''

多继承

# 3. 多继承可以继承所有父类1的方法和类属性,只能继承第一个父类的对象属性
class A:
    pass
class B:
    def __init__(self,hight,weight):
        self.hight = hight
        self.weight = weight
class C(A,B,Person):
    def __init__(self,tel,weight=180,hight=170):
        super().__init__(weight,hight)
        self.tel = tel
a = C(110,hight=170,weight=180)
# print(a.name)
print(a)
print(a.weight)
print(a.tel)

3. json数据

json数据

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

'''

json数据格式

'''
要求:1)一个json有且只有一个数据;2)唯一的数据必须是json支持的数据
json支持的类型:
1. 数字   -   数字直接写,并且支持科学记数法,例如:63,4.23,-22,22.3,3e5
2. 字符串  -   只能使用双引号,支持转义字符,例如:"aca","adad\nda"
3. 布尔值  -   只有true 和 false两个值
4. 空值   -   null
5. 数组   -   相当于python的列表,[a,s,d,ad,daa,...]
6. 字典   -   相当于python的字典,json中的键只能是字符串

'''

python数据和json数据的相互转换

# json模块中提供了python中所有和json操作相关的函数
import json
# 1)json转python
'''
json    python
数字     int,float         
字符串     str(双引号变单引号)
布尔值     true    -> True, false  -> False
空值      null    -> None
数组      list
字典      dict

json.loads(json格式字符)        -   将json格式字符串对应的json数据转换成相应的python数据
注:json字符串指的是字符串内容是json的字符串

'''
result = json.loads(open('files/汽车新闻.json','r',encoding='utf-8').read())
for i in result:

    print()
# 2)python转json
'''
python          json
intfloat       数字
str             字符串,单引号会变成双引号
bool            布尔,True -> true,False   -> false
列表,元组         数组
dict            字典键会变成双引号字符串
None            null



json.dump(python数据) -   将指定的python数据转换成json数据

作业

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

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

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

    class Dog:
        def __init__(self,name,gender,breed):
            self.name = name
            self.gender = gender
            self.breed = breed
        def func1(self):
            print('叫唤')
    
        def __repr__(self):
            return str(self.__dict__)
    class Person:
        def __init__(self,age,dog,name):
            self.name = name
            self.dog = dog
            self.age = age
        def func2(self):
            print('遛狗')
    
        def __repr__(self):
            return str(self.__dict__)
    a = Dog(3,'雄','法斗')
    b = Person(name='小明',age='18',dog='小黑')
    print(a)
    print(b)
    print(a.func1())
    print(b.func2())
    
    
  2. 定义一个矩形类,拥有属性:长、宽 拥有方法:求周长、求面积

    class Rect:
        def __init__(self, wide, long):
            self.wide = wide
            self.long = long
            area = self.long * self.wide
            perimeter = self.long * 2 + self.wide * 2
            print(area, perimeter)
    x = Rect(3, 4)
    
  3. 定义一个二维点类,拥有属性:x坐标、y坐标 拥有方法:求当前点到另外一个点的距离

    class Two_dimension:
        def __init__(self,x1,y1,x2,y2):
            self.x1 = x1
            self.y1 = y1
            self.x2 = x2
            self.y2 = y2
        def func1(self):
            result = ((self.x1 - self.x2) ** 2 + (self.y1 - self.y2) ** 2) ** 0.5
            print(result)
    a = Two_dimension(0,0,1,1)
    print(a.func1())
    
  4. 定义一个圆类,拥有属性:半径、圆心 拥有方法:求圆的周长和面积、判断当前圆和另一个圆是否外切

    import math
    class Circle:
        globals()
        pi = math.pi
    
        def __init__(self,r1,x1,y1,r2,x2,y2):
            self.r1 = r1
            self.x1 = x1
            self.y1 = y1
            self.r2 = r2
            self.x2 = x2
            self.y2 = y2
        def func3(self):
            result1 = Circle.pi * (self.r1 ** 2)
            result2 = 2 * Circle.pi * self.r1
            print(f'面积:{result1}')
            print(f'周长:{result2}')
        def func4(self):
            distance = ((self.x1 - self.x2) ** 2 + (self.y1 - self.y2) ** 2) ** 0.5
            if distance == ((self.r1 - self.r2) ** 2) ** 0.5:
                print('外切')
            else:
                print('不外切')
    a = Circle(3,0,0,5,6,4)
    print(a.func3())
    print(a.func4())
    
  5. 定义一个线段类,拥有属性:起点和终点, 拥有方法:获取线段的长度

    class Segment:
        def __init__(self,x,y):
            self.x = x
            self.y = y
        def func1(self):
            result = ((self.x - self.y) ** 2) ** 0.5
            print(result)
    a = Segment(0,9)
    print(f'线段长度:{a.func1()}')
    
  6. 获取英雄名字和价格

    import json
    result = json.loads(open('json数据/FeHelper-20220308165245.json',encoding='utf-8').read())
    name_list = []
    price_list = []
    for i in result['hero']:
        name_list.append(i['name'])
        price_list.append(i['goldPrice'])
    # print('英雄名称',name_list)
    # print('英雄价格',price_list)
    hero_dict = {}
    for i in range(len(name_list)):
        hero_dict.setdefault(name_list[i],price_list[i])
    print(hero_dict)
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值