day17-面向对象作业

总结

类 : 人

对象: 李灰灰

  • 类和对象
  • 定义类(创建类)
    • 定义类就是用代码描述清楚你这个类是拥有那些相同功能,哪些相同属性的对象的集合.
    • 功能 - 对应的就是函数
    • 属性 - 保存数据的变量(在类中叫属性)
    • 语法:
      • 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
      • 怎么调用:类.静态方法()
      • 特点:没有默认参数
      • 什么时候用:实现函数的功能既不需要当前类的对象也不需要当前类,就使用静态方法

作业

  1. 定义一个狗类和一个人类:

    狗拥有属性:姓名、性别和品种 拥有方法:叫唤

    人类拥有属性:姓名、年龄、狗 拥有方法:遛狗

    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())
    
  2. 定义一个矩形类,拥有属性:长、宽 拥有方法:求周长、求面积

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())

  1. 定义一个二维点类,拥有属性: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))
  1. 定义一个圆类,拥有属性:半径、圆心 拥有方法:求圆的周长和面积、判断当前圆和另一个圆是否外切
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))

  1. 定义一个线段类,拥有属性:起点和终点, 拥有方法:获取线段的长度

    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())
    
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值