面向对象和json总结和作业
一、属性
- 属性
定义类就是用代码来描述清楚这个类拥有哪些相同功能和哪些相同属性的对象的集合,方法(函数)用来描述相同功能。属性(变量)用来描述相同属性。
属性分为两种:类属性、对象属性
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)
Student.a = 200
print(Student.a)
stu = Student()
print(stu.name, stu.age)
- 对象属性默认值
1)赋一个固定的值:每次创建对象的时候不能重新赋值,只能在创建好对象后修改属性的值
2)使用没有默认值的参数赋值
3)使用默认值的参数赋值
class Person:
def __init__(self, name, age=18, gender='男'):
self.name = name
self.age = age
self.gender = gender
self.height = 170
def __repr__(self):
# return f'<name:{self.name}, age:{self.age}, gender:{self.gender}>'
return str(self.__dict__)
p1 = Person('小明')
p2 = Person('张三', 20)
p3 = Person('小花', 22, '女')
print(p1)
print(p2)
print(p3)
- self的使用
self是谁调用就指向谁,所以在对象中可以直接将self当成对象来使用(这个类的对象能做的事情self都可以做)
# 练习:定义一个矩形类,有长和宽两个属性,有求面积和求周长两个方法
class Rect:
def __init__(self, w, l):
self.width = w
self.length = l
# self.area = w * l
def get_area(self):
# self = r1; self = r2
return self.width * self.length # return r1.width * r1*length; r2.with * r2.length
def get_perimeter(self):
return (self.width + self.length) * 2
r1 = Rect(10, 20)
r2 = Rect(10, 5)
print(r1.get_area())
print(r2.get_area())
- 方法的选择
对象方法:如果实现函数的功能需要对象(需要对象属性)就使用对象方法
类方法:在使用函数的功能不需要对象(或者对象属性)的前提下&#x