一、复习
1.json
要求:有且只有一个数据 ; 必须是json支持的类型的数据
数字:19,23,9,3e4,-12
字符串:“abc”,"\tabc\n123"
布尔:true,false
数组:{12,23,“abc”,true}
字典:{“key”:12}
工具:json
json——>python :load(json格式的字符串)
python——>json:dumps(python数据)
2.面向对象编程
class Math:
def f(self):
pass
二、对象方法
class 类名:
类的说明文档
类的内容(对象方法,类方法,静态方法+对象属性,类属性)
1.对象方法
方法指的就是定义在类中的函数。
1)怎么定义:直接定义(不需要添加任何装饰器)在类中的函数就是对象方法
2)怎么调用:通过’对象.xx( )'的形式来调用
3)特点:每个对象方法都有一个默认参数self,并且通过对象调用对象方法时不需要传参。
系统会自动将当前对象传给self(self谁调用就指向谁)
2.初始化方法 —— _ _ init _ _
_ _ init _ _是python类中一个特殊的对象方法,也是魔法方法。
魔法方法:类中方法名以__ 开头并且以 __结尾的方法都是魔法方法,魔法方法全部都是系统自带的。
魔法方法不需要程序员主动调用,系统会在特定的情况下自动调用。
1)_ _ init _ _ 方法会在创建对象的时候被自动调用的
2)通过类创建对象的时候需不需要参数,需要几个参数,由类中的_ _ init _ _决定。
三、属性
1.类中的属性
定义类就是用代码来描述这个类是拥有哪些相同特征的事物的总和。
如果特征是通过数据来体现的,那么这种特征就用属性来表示。
1)类属性
a.怎么定义:直接定义在类中的变量就是类属性
eg:
class A:
#a、name是类属性
a=10
name=‘小明’
print(A.a)
print(A.b)
b.怎么使用:通过’类.xx’的方式来使用
c.什么时候用:属性值不会因为对象不同而不一样的时候就使用类属性
2)对象属性
a.怎么定义:以’self.xx=值’的形式定义在_ _ init _ _ 方法中
eg:#b和gender是对象属性
def _ _ init _ _ (self):
self.b=10
self.gender=‘男’
b.怎么使用:通过’对象.xx’的方式来使用
eg:#使用对象属性
x=A()
print(x.b)
print(x.gender)
c.什么时候用:属性值会因为对象不同而不一样的时候就使用对象属性
2.对象属性默认值
_ _ init_ _ 的参数
1)方式一:直接给固定的值(主要用于这个属性值在绝大部分情况下都是某一个值,极少数情况会变化的时候)
class Person:
def _ _ init _ _(self):
self.name=‘张三’
self.age=18
self.gender=‘男’
2)方法二:在_ _ init_ _中提供给这个属性赋值的形参,形参没有默认值(属性值一般都不一样)
class Person:
def _ _ init _ _(self,name):
self.name=name
self.age=18
self.gender=‘男’
p1=Person.name
3)方式3:在_ _ init_ _中提供给这个属性赋值的形参,形参有默认值
四、方法
1.方法
1)对象方法
a.怎么定义:直接定义(不需要加装饰器)
b.怎么调用:对象.xx( )
c.特点:参数self,不需要传参,指向当前对象
d.什么时候用:实现函数功能时是否需要对象属性,就使用对象方法
class A:
def func1(self):
print(‘对象方法’)
2)类方法
a.怎么定义:定义函数前加 @classmethod装饰器
b.怎么调用 : 类.xx( )
c.特点:自带参数cls,调用的时候不用传参,系统会自动将当前类传给cls
d.什么时候用:在不需要对象属性的情况下需要类就使用类方法
3)静态方法
@staticmethod
def func3():
print()
a.怎么定义:定义函数前加 @staticmethod装饰器
b.怎么调用 : 类.xx( )
c.特点:没有特点–没有默认参数
d实现函数功能既不需要类,也不需要对象,就使用静态方法。
五、对象属性的增删改查
class Student:
def__ init __ (self,name,age=18,stuid):
self.name=name
self.age=age
self.stuid=stuid
self,score=0
#当通过print打印当前类的对象的时候,这个方法会被自动调用,并且在打印的时候会打印这个方法的返回值(返回值必须是字符串)
#打印的是谁self就是谁
def__ repr __(self):
#学号:xx 姓名:xxx,年龄:xx,分数:xx
return f’学号:{self.stuid} 姓名:{self.name },年龄:{self.age},分数{self.score}’
stu1=Student(‘小明’,‘stu001’)
print(stu1)
stu2=Student(‘小花’,‘stu002’,20)
print(stu2)
1.查 — 获取属性值
对象.对象属性 —— 获取指定属性对应的值
getattr(对象,属性名) —— —— 获取指定属性对应的值
getattr(对象,属性名,默认值) —— 获取指定属性对应的值,如果属性不存在不报错返回默认值
print(stu1.name)
print(getattr(sut1,‘name’))
#getattr可以动态确定获取的是哪种属性的值
value=input(‘请输入需要获取的属性的名字:’)
print(getattr(stu1,value))
2.增、改
对象.属性=值 —— 如果属性存在就是修改指定属性的值,如果属性不存在就添加属性。
setattr(对象,属性,值) —— 如果属性存在就修改指定属性的值,如果属性不存在就添加属性
stu1.name=‘张三’
print(stu1)
stu1.heigh=180
print(stu1)
setattr(stu1,‘name’,'李四’)
print(stu1)
3.删除
del 对象.属性
delattr(对象,属性名)
del stu1.stuid
print(stu1)
delattr(stu1,‘age’)
print(stu1)
#__ slots __ 可以约束当前类的对象最多能拥有哪些对象属性