day16-day17

day16-day18

编程思想

# 1. 面向过程变成(穷人思想)

# 2. 函数式编程(小资思想)
# 遇到问题马上想到的是是否已经存在一个函数具备解决问题的能力,如果有直接用,没有就造一个


# 3. 面向对象编程(富豪思想)
# 遇到问题马上想到有没有一个对象具备功能,如果有直接用,没有就创建这个对象

类和对象

  1. 认识类 和 对象
: 类是具有相同功能和相同属性的对象的集合(一类事物的总称) - 是抽象的概念

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

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

# student_name  PEP8命名规范
# studentName   驼峰命名
  1. 创建对象
对象又叫实例
语法:
类名()

对象方法

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

1.2 类方法

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

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


class Person:
    def func1(self):
        print('对象方法')

    def func11(self,a,b):
        print('1')

    @classmethod
    def func2(cls):
        print('类方法')

    @staticmethod
    def func3():
        print('静态方法')

# p1就是person的对象
p1 = Person()

# 通过对象啊调用对象方法
p1.func1()

p1.func11(1,2)

# 类方法调用
Person.func2()

# 通过类调用静态方法
Person.func3()

常有的两个魔法方法

  1. 魔法方法:类中两个下划线开头并且以两个下划线开头两个下划线结尾,并且会在特定情况下自动调用的方法就是魔法方法。
  2. 常用魔法方法
1) __init__  : 在通过类创建对象的时候会被自动调用,创建对象时要几个参数看__init__除了self以外有没有额外的参数

2) __repr__  : 打印类的对象的时候会自动调用
'''

class Dog:
    def __init__(self):
        print('qqq')

    def __repr__(self):
        # 打印是谁,self就指向谁
        return '124'

day17

属性

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

属性分为两种:

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

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

class Student:
    # a就是类属性(直接定义在类中)
    a = 10

    # name和age是对象属性
    def __init__(self):
        self.name = '小明'
        self.age = 18

print(Student.a)  #类属性使用
print(Student().name,Student().age) # 对象属性使用

# 定义一个圆,拥有两个属性分别是半径和圆周率

class Round:
    pi = 3.1415926

    def __init__(self,r):
        self.r = r
  1. 对象属性默认值
  1. 赋一个固定的值,不能再重新赋值
  2. 使用没有默认值的参数赋值
  3. 使用默认值的参数赋值
class Person:
    def __init__(self,name,age,gender):
        self.name = name
        self.age = age
        self.gender = gender

    def __repr__(self):
        return f'name:{self.name},age:{self.age},gender:{self.gender}'

p1 = Person('张三',18,'男')
print(p1.name,p1.age,p1.gender)

# 3. self 的使用
'''
self是谁调用就指向谁,所以在对象中可以直接将self当成对象来使用,(这个类的对象能做的事self都可以)
'''
# 定义一个矩形,有长和宽两个属性,求面积和周长两个方法
class Rectangle:
    def __init__(self,length,width):
        self.length = length
        self.width = width

    def area(self):
        print(self.length * self.width)

    def __repr__(self):
        return f'{self.length * self.width}'

p1 = Rectangle(10,10)
p1.area()
print(p1)
  1. 方法的选择
    对象方法: 如果实现函数的功能需要对象属性就使用对象方法
    类方法: 实现函数的功能不需要对象(或者对象属性),需要类就使用类方法
    静态方法:既不需要类,也不需要对象
class Math:
    @staticmethod
    def sum(a,b):
        return a+b

class Chemi:
    @staticmethod
    def sum():
        print('化学')

# p1 = Math()
# print(p1.sum(1, 2))
print(Math.sum(1, 2))

继承

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

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

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

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

class Person:
    count = 60

    def __init__(self):
        self.name = '小明'
        self.age = 18
        self.gender = '男'

    def eat(self):
        print('吃')

    def sleep(self):
        print('睡')

class Student(Person):
    pass


print(Student.count)
Student().eat()
  1. 在子类中添加
class Huang:
   money = -10000000

   def __init__(self,a,b):
       self.a = a
       self.b = b

   def department(self):
       print('房贷')

   def auto(self):
       print('车贷')

class Wang(Huang):
   money1 = -20000000
   def __init__(self,a,b):
       # 在这调用父类的__init__方法就可以继承父类的对象属性
       super().__init__(a,b)
       self.department2 = 200000000
       self.auto1 = 50000000

   def department1(self):
       print('价值20000000')

   def auto(self):
       print('价值5000000')


print(Wang.money1+Wang.money)

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

2) 添加对象属性


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

Wangkeyu().auto()
p1=Wangkeyu(3,4)
print(p1.a)

class Lei(Wang):
   def __init__(self,a,b):
       super().__init__(a,b)
       pass
print(Lei(65,33).a)


class Animal:
   def __init__(self,xxx):
       self.xxx = xxx

class Jiangfei(Animal,Leitinghao):
   # def __init__(self,a,b,xxx):
   #     super().__init__(a,b,xxx)
   #     super(Animal,self).__init__(xxx)
   pass

json

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

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

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

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

json       python
数字         intfloat
字符串        str(双引号变单引号)
布尔值        true ->True; false ->False
空值          null --> None
数组          list
字典          dict


json.loads(json格式字符串) - 将json格式字符串数据转换成python数据
注: json格式字符串 -指的是字符串内容是json的字符串
json.loads('"abc"')
json.loads('100')
json.loads('[1,2,3]')
json.loads('{"a":10,"10":20}')
json.loads('[10,"abc",true,null]')

rel = json.loads(open(r'./files/汽车新闻.json','r',encoding='utf-8').read())
for i in rel['newslist']:
    print(i['title'])
  1. python转json
python              json
int,float           数字
str                 字符串,单引号会变双引号
bool                布尔,True ->true, False -> false
列表、元组           数组
dict                字典、键会变成双引号字符串
None                null
# json.dumps(pyhton数据)    -  将指定的pyhton数据转换成json格式字符串
json.dumps(100)  # '100'
json.dumps(True)  #'true'
json.dumps(None)  # 'null'
json.dumps({10: 20, 'name': '小', 'b': True})   #{"10": 20, "name": "\u5c0f", "b": true}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值