一、总结
-
属性
-
类属性(字段):直接定义在类中的变量就是类属性,通过‘类.’方式使用
-
对象属性:以‘self.属性名=值’方式定义在__init__方法中
-
对象属性的默认值:
-
self:谁调用就指向谁,所以在对象中可以直接将self当成对象来使用
-
方法的选择:
1)对象方法:如果实现函数功能需要对象(或者对象属性),就使用对象方法
2)类方法:实现函数功能不需要对象(或者对象属性)的时候
3)静态方法:既不需要类,也不需要对象
-
-
继承
-
继承:让子类拥有父类的属性和方法(子类:继承者;父类:被继承者,也叫超类)
-
语法: class 类名(父类列表):
类的说明文档
类的内容
(如果定义类的时候没有写父类,name这个类默认继承py的基类-object) -
在子类中添加内容:
1)添加类属性和方法:直接在子类中定义新的属性和方法
2)添加对象属性: -
super().init(父类参数):在子类中添加super,可以获取父类中的对象属性
-
多继承可以继承所有父类的所有方法和类属性,只能继承第一个父类的对象属性
-
-
json
- json:是一个通用的数据格式,主要用于不同语言之间进行有效的数据沟通
- 要求:一个json有且只有一个数据;唯一的这个数据必须是json支持的类型的数据,json支持(数字、字符串、布尔值、空值、数组、字典)
(数字:直接写,并支持科学计数法
字符串:只能使用双引号,支持转义字符
布尔值:只有true和false两个,都是小写
空值:null
数组:相当于py的列表,[元素1, 元素2, …]
字典:相当于py的字典,但是键只能是字符串) - py和json数据的相互转换:(先导入模块后)
1)json转python:
json python
数字 int、float
字符串 str
布尔值 小写转大写
空值 None
数组 list
字典 dict
2)python转json:
基本反过来,注意大小写和单双引号,多一个元组也可以转为json的数组 - json模块:
- json.loads(json格式字符串) — 将json格式字符串对应的json数据转为相应的python数据,括号内不是json报错
- json.dumps(python数据) — 将python数据转为json格式字符串
二、作业
-
定义一个狗类和一个人类:
狗拥有属性:姓名、性别和品种 拥有方法:叫唤
人类拥有属性:姓名、年龄、狗 拥有方法:遛狗
class Dog: def __init__(self, name, sex, breed): self.name = name self.sex = sex self.breed = breed def call(self): print(f'{self.name}是一只{self.sex}的{self.breed},它正在叫唤') class Human: def __init__(self, name1, age, dog): self.name1 = name1 self.age = age self.dog = dog def play(self): print(f'{self.name1}今年{self.age}岁了,他有一只{self.dog},他正在遛狗') a = Dog('大黄', '雄性', '金毛') a.call() b = Human('杰克', 18, '') b.play()
-
定义一个矩形类,拥有属性:长、宽 拥有方法:求周长、求面积
class Rectangle: def __init__(self, long, wide): self.long = long self.wide = wide def area(self): return self.long * self.wide def perimeter(self): return (self.long + self.wide) * 2 result1 = Rectangle(5, 2) result2 = Rectangle(5, 4) print(result1.area()) print(result2.perimeter())
-
定义一个二维点类,拥有属性:x坐标、y坐标 拥有方法:求当前点到另外一个点的距离
class Point: def __init__(self, x, y): self.x = x self.y = y def distance(self, o): return ((self.x - o.x) ** 2 + (self.y - o.y) ** 2) ** 0.5 p1 = Point(0, 9) # x,y p2 = Point(0, 5) print(p1.distance(p2))
-
定义一个圆类,拥有属性:半径、圆心 拥有方法:求圆的周长和面积、判断当前圆和另一个圆是否外切
class Circle: Pi = 3.14 def __init__(self, r, x, y): self.r = r self.x = x self.y = y def area(self): return Circle.Pi * self.r ** 2 def perimeter(self): return Circle.Pi * self.r * 2 def exterior_contact(self, b): if ((self.x - b.x) ** 2 + (self.y - b.y) ** 2) ** 0.5 == self.r + b.r: return "两圆外切" else: return '两圆不外切' yuan1 = Circle(7, 4, 7) yuan2 = Circle(5, 0, -5) print(yuan1.exterior_contact(yuan2)) print(yuan1.area()) print(yuan1.perimeter()) print(yuan2.area()) print(yuan2.perimeter())
-
定义一个线段类,拥有属性:起点和终点, 拥有方法:获取线段的长度
class Segment: def __init__(self, start, end): self.start = start self.end = end def length(self): return abs(self.end - self.start) a1 = Segment(-2, -9) print(a1.length())