总结
类 : 人
对象: 李灰灰
- 类和对象
- 定义类(创建类)
- 定义类就是用代码描述清楚你这个类是拥有那些相同功能,哪些相同属性的对象的集合.
- 功能 - 对应的就是函数
- 属性 - 保存数据的变量(在类中叫属性)
- 语法:
- class 类名:
类的说明文档
类的内容 - class - 关键字,固定写法
- 类名 - 程序员自己命名
要求:是标识符,不是关键字
规范:见名知义 类名驼峰式命名(单词之间采用首字母大写来区分),首字母大写,单词之间不能用下划线隔开,不使用系统函数名,类名,模块名 - : - 固定写法
- 类的说明文档 - 本质就是多行注释
- 类的内容 - 包括属性和方法
属性分为:类属性(类的字段)和对象属性
方法分为:对象方法,类方法和静态方法 - 注意:方法就是定义在类中的函数
- 创建对象 语法:类()
- class 类名:
- 对象方法
- 怎么定义:直接定义在类中的函数(定义函数前不用加装饰器)
- 怎么调用:用对象来调用 - 对象.函数名()
- 特征:自带参数self,在调用的时候self不用传参,系统会自动将当前对象传给self(谁调用self指向谁)
- 构造函数/构造方法
- 函数名和类名相同,并且是用来创建对象的方法就是构造方法
- python的构造函数在创建类的时候由系统自动创建,程序员只需要在创建对象的时候自动调用
- 初始化方法:init
- 定义类的时候可以根据需求在类中添加对象方法:init,添加的时候要保证函数名是__init__,第一个参数是self,
- 除此以外我们可以随意添加参数和函数体
- 使用类创建对象的时候,系统会自动调用这个类中的__init__方法
调用构造方法创建对象的时候需不需要参数,需要几个参数,看这个类的__int__方法除了self以外有没有额外的参数 - 魔法方法:类中方法名由两个下划线开头并且以两个下划线结尾的方法,所有的魔法方法都是自动调用的
- 属性 属性是用来描述类的数据特征,属性的本质是保存数据的变量.
- 类属性
- 怎么定义:直接定义在类中的变量就是类属性
- 怎么使用:通过类来使用, 类.类属性
- 什么时候用:属性的值不会因为对象的不同而不一样,这种属性就定义成类属性
- 对象属性
- 怎么定义:以’self.属性名=值’的形式定义在__init__方法中
- 怎么使用:通过对象使用,对象.对象属性
- 什么时候用:属性的值会因为对象的不同而不一样,这种属性就定义成对象属性
- 对象属性赋初值的三种方式
- 赋固定值
- 使用没有默认值的参数赋值
- 使用有默认值的参数赋值
- 对象方法
- 怎么定义:直接在类中定义函数(函数前不加装饰器)
- 怎么调用:对象.对象方法()
- 特点:有默认参数self,self不用传参,谁调用,self就指向谁
- 什么时候用:如果实现函数功能需要用到对象的属性,一定是对象方法,self没有其他东西能替代它
- 类方法
- 怎么定义:在定义函数前加装饰器@classmethod
- 怎么调用:类.类方法()
- 特点:自带参数cls,cls不用传参,系统将当前类传给cls(谁调用就指向谁)
- 什么时候用:实现函数的功能,在不需要对象属性,但需要类的时候就使用类方法
- 静态方法
- .静态方法 - 写类的目的是为了封装各种同类功能,就可以用静态方法
- 怎么定义:在定义函数前加装饰器@staticmethod
- 怎么调用:类.静态方法()
- 特点:没有默认参数
- 什么时候用:实现函数的功能既不需要当前类的对象也不需要当前类,就使用静态方法
- 类属性
作业
-
定义一个狗类和一个人类:
狗拥有属性:姓名、性别和品种 拥有方法:叫唤
人类拥有属性:姓名、年龄、狗 拥有方法:遛狗
class Dog: def __init__(self, name, gender, breed): self.name = name self.gender = gender self.breed = breed def method(self): return f'{self.breed}{self.name}在叫唤' class Person: def __init__(self, p_name, p_age, p_dog): self.p_name = p_name self.p_age = p_age self.p_dog = p_dog def method(self): return f'{self.p_age}岁的{ self.p_name}在溜她的狗{self.p_dog}' dog1 = Dog('土豆', '母', '中华田园犬') print(dog1.method()) person1 = Person('花花', '18', dog1.name) print(person1.method())
-
定义一个矩形类,拥有属性:长、宽 拥有方法:求周长、求面积
class Rectangle:
def __init__(self, length, wide):
self.length = length
self.wide = wide
def perimeter(self):
return 2*(self.length+self.wide)
def area(self):
return self.length*self.wide
rectangle1 = Rectangle(10, 20)
print(rectangle1)
print(rectangle1.perimeter())
print(rectangle1.area())
- 定义一个二维点类,拥有属性:x坐标、y坐标 拥有方法:求当前点到另外一个点的距离
class Point:
def __init__(self, x_point, y_point):
self.x_point = x_point
self.y_point = y_point
def point_distance(self, x, y):
return ((x-self.x_point)**2+(y-self.y_point)**2)**(1/2)
point1 = Point(0, 10)
print(point1.point_distance(5, 20))
- 定义一个圆类,拥有属性:半径、圆心 拥有方法:求圆的周长和面积、判断当前圆和另一个圆是否外切
class Circle:
pi = 3.1415
def __init__(self, radius, x_point, y_point):
self.radius = radius
self.x_point = x_point
self.y_point = y_point
def perimeter(self):
return 2*Circle.pi*self.radius
def area(self):
return Circle.pi*(self.radius)**2
def combination(self, radius1, x1_point,y1_point):
if self.radius+radius1 == ((x1_point-self.x_point)**2+(y1_point-self.y_point)**2)**(1/2):
return True
return
circle1 = Circle(5, 5, 0)
print(circle1.perimeter())
print(circle1.area())
print(circle1.combination(5, 15, 0))
-
定义一个线段类,拥有属性:起点和终点, 拥有方法:获取线段的长度
class Segment: def __init__(self, begin_x, begin_y, end_x, end_y): self.begin_x = begin_x self.begin_y = begin_y self.end_x = end_x self.end_y = end_y def segment_length(self): return ((self.end_x-self.begin_x)**2+(self.end_y-self.begin_y)**2)**(1/2) segment1 = Segment(0, 20, 0, 40) print(segment1.segment_length())