类和对象

2018-11-21  本文已影响0人  L丶Y1122

1.recode

1.json数据:a.只能有一个数据,并且这个数据必须是json支持的类型的数据
2.json支持的数据类型:
3.json与python数据的转换

json.load(文件对象) - 将json文件里面的数据转换成python数据
json.loads(字符串)- 将json数据转换成python数据
json.dump(文件对象)- 将python文件里面的数据转换成json数据
json.dumps(字符串)- 将python数据转换成json数据

import json
print(json.dumps('abc')) # -> '"abc"'
print(json.dumps([1,2,'abc'])) #-> "[1, 2, "abc"]"

二.异常捕获

try: - except:捕获所有异常
try: - except 异常类型: 捕获指定异常
try: - except (异常类型1,异常类型2): 捕获多个指定异常,做出相同反应
try:- except 异常类型1:- except 异常类型2: 捕获多个异常,做出不同反应

finally - 不管try后面的代码有没有异常,也不管异常是否捕获到,都会执行finally后面的代码段

三.抛出异常

raise 异常类型
异常类型必须是一个类,并且这个类是exception的子类


2.编程思想

1.编程思想:
2.类和对象

3.类的声明

1.类的声明

补:驼峰式命名:如果名字由多个单词组成,通过单词首字母大写,来区分不同的单词
补:声明在类里面的函数就叫方法

2.属性和方法

类中的属性 - 指的是在类中声明的变量;分为类的字段、对象属性
类中的方法 - 指的是在类中声明的函数;分为三种:对象方法,类方法,静态方法。

class Person:
    """人类"""
    #=======属性======
    num = 61 #类的字段
    #=======方法======
    def eat(self):
        print("人在吃饭")

#Person是类(类就是类型)
print(Person)

3.创建对象
语法:
类名() - 创建一个类对应的对象

#创建一个Person类的对象xiao_ming
xiao_ming =Person()
print(xiao_ming) #<__main__.Person object at 0x0000000002498A58>

4.对象方法

1.什么是对象方法

直接声明在类里面,并且自带一个self的参数的函数

2.对象方法的调用 - 通过对象调用对象方法

对象.对象方法()

3.self(当前对象)

通过对象调用对象方法的时候,对象方法中的第一个参数self不用传参;
系统会自动将当前对象传给self
哪个对象调用的,self就指向谁。

注意:当前类的对象能做的时候,self都能做,必须是通过对象调用才有用

# 声明Person类
class Person:
    """人类"""
    #声明了一个对象方法sleep
    def sleep(self):
        print("睡觉")
        self.run()
    def run(self):
        print("跑")
#创建一个Person类的对象i
i =Person()
i.sleep()

5.init方法和构造方法

1. __ init __ 方法:
2.构造方法

注意:当init方法中除了self以外,如果需要别的参数,那么这些参数是通过构造方法来传的参

class Person:
    #声明一个对象方法
    def __init__(self):
        print("init方法")

p1 =Person()

def __func2__(a,b):
    print("__func2__方法",a,b)
def func1(*args,**kwargs):
    print("创建对象")
    __func2__(*args,**kwargs)
    print("返回对象")
func1(50,b=30)

6.对象属性

1.什么是对象属性
#情况一:使用的对象属性创建的时候都使用一个固定的默认值
class Person:
    def __init__(self):
        #这儿的name和age就是Person类的对象属性
        self.name =""
        self.age =10

#创建对象
p1 =Person()
#使用对象属性
p1.name ="滴滴滴"
print(p1.name)
#情况二.

class Person():
    def __init__(self,name):
        self.name =name
        self.age = 10

p2 = Person("曾宇")
p3 =Person("是帅逼")
print(p2.name,p3.name)
#修改对象属性的值
p2.name = "龙少爷"
print(p2.name,p3.name)
2.什么样的属性应该声明成对象属性

如果属性的值会因为对象不同而不一样,这样的属性就一个声明成对象的属性
反之就声明成类的字段。


#练习:声明一个矩形类

class JuXing:
    def __init__(self,long,wide):
        self.chang =long
        self.kuan = wide
    #一个对象方法需不需要除了self以外的其他参数,看实现这个函数的功能
    # 需不需要出了对象属性以外的其他数据
    def area(self):
        #self = p1
        return self.chang*p1.kuan

p1 =JuXing(20,10)
print("面积:",p1.area())

#练习:声明一个point类,拥有属性x坐标和y坐标,拥有的功能是求两点之间的距离
class Point:
    def __init__(self,x,y):
        self.x_coor =x
        self.y_coor =y
    def distance(self,x1,y1):
        return ((self.x_coor-x1)**2+(self.y_coor-y1)**2)**0.5

r1 =Point(10,20)
print("距离:",r1.distance(10,30))

#最佳方法:
class Point:
    def __init__(self,x,y):
        self.x =x
        self.y =y
    def distance(self,other):
        return ((self.x-other.x)**2+(self.y-other.y)**2)**0.5

r1 =Point(10,0)
r2 =Point(0,0)
print(r1.distance(r2))

7.对象属性的增删改查

class Dog:
    def __init__(self,name,color,type):
        self.name =name
        self.color= color
        self.type = type

dog1 =Dog("旺财","黄色","二哈")

#1.查(获取对象属性的值)
"""
a.对象.属性名 -属性不存在时会报错
b.getattr(对象,属性名,默认值) -给了默认值之后,如果属性不存在的时候会返回默认值

"""
print(dog1.name) #"旺财"
# print(dog1.name1) #AttributeError: 'Dog' object has no attribute 'name1'
print(getattr(dog1,"name"))#"旺财"
# print(getattr(dog1,"nam1",None)) #None

try:
    print(dog1.name1)
except AttributeError:
    print(None) #None

#2.增、改
"""
a.对象.属性 = 值 (属性存在时是修改,属性不存在时是添加)
b.setattr(对象,属性名,值)

"""
class Dog:
    def __init__(self,name,color,type):
        self.name =name
        self.color= color
        self.type = type

dog1 =Dog("旺财","黄色","二哈")
dog1.aaa =20
print(dog1.aaa) #20 添加
dog1.name ="才才"
print(dog1.name) #才才  修改

#3.删
"""
del 对象.属性 - 将指定对象的指定属性删除

delattr(对象,属性名)

"""
# delattr(dog1,"name")
# # del dog1.name
# print(dog1.name) #AttributeError: 'Dog' object has no attribute 'name'

# 注意:对象属性的增删改查,都是针对指定的那一个对象,不会影响其他对象。

# 4.__slots__ 魔法
"""
是用来约束当前这个类有哪些对象属性

"""
class Student:
    #Student类的对象只能有name,id,age属性
    __slots__ =("name","id","age")
    def __init__(self,name,age):
        self.name=name
        self.id ="001"
        self.age=age

stu1 =Student("小明",18)
stu1.name = "小花"

8.类的字段和内置类属性

1.类的字段

不会因为对象不同而不一样的数据,就声明成类的字段

class Person:
    #声明一个类的字段
    number =61
    def show_number(self):
        print("人的数量%s"%Person.number)


Person.number =20
print(Person.number)

2.内置类属性

内置属性就是声明类的时候,类中已经声明好的属性(类的字段和对象的属性)

class Dog:
    """说明文档:狗类"""
    #类的字段
    type ="犬科"
    #对象属性
    def __init__(self,name ="",age=0,color=""):
        self.name =name
        self.age =age
        self.color =color
    #对象方法
    def eat(self,food):
        print("%s在吃%s"%(self.name,food))
    #类方法
    @classmethod
    def  shout(cls):
        print("汪汪汪")
    #静态方法
    @staticmethod
    def bite():
        print("狗咬人!")

dog1 =Dog("小黑",10,"黄色")
# a.__name__
"""
类.__name__ - 获取类的名字(字符串)

"""
print(Person.__name__,type(Person.__name__)) #Person <class 'str'>

# b.__class__
"""
对象.__class__ -获取对象对应的类(结果是一个类,原来类能做的事情它都能做)

"""
a =dog1.__class__
print(a.__name__) #Dog <class"str">
print(Dog.type)#犬科
print(a.type) #犬科


#c.__dict__ (返回的是字典)
"""
类.__dict__ -  获取当前类的所有的类的字段及其对应的值
(重点)对象.__dict__ - 将当前对象所有的属性及其值转换成字典,key是属性名,value是属性的值 

"""
print(dog1.__dict__)
#d.__base__(返回的是元组,元素就是父类)
"""
类.__basa__ 获取当前类的父类

"""
print(Dog.__bases__) #(<class 'object'>,)

#e.__module__
"""
类.__module__ - 获取当前类所在的模块的模块名

"""
print(Dog.__module__)  #__main__

#f.__doc__
"""
类.__doc__ - 获取类的说明文档

"""
print(Dog.__doc__) #说明文档:狗类
上一篇 下一篇

猜你喜欢

热点阅读