编程思想、类和对象

编程思想、类和对象

  1. 编程思想

    # 1.面向过程编程(穷人思想)   -   逻辑+基本语法
    print(10 + 20)
    
    # 2.函数式编程(小资思想) -   函数+逻辑+基本语法
    sum((10, 20))
    
    def sum1(num1, num2):
        return num2 + num1
    
    # 3.面向对象编程(富豪思想)-  类和对象+函数+逻辑+基本语法
    
  2. 类和对象

    1. 什么是类,什么是对象

      """
      类就是拥有相同属性和相同功能的对象的集合(抽象的)
      对象是类的实例 (类的具体)
      
      人类: 有名字、有年龄、有性别、有肤色,会说话,能思考,可以睡觉
      """
      
      class Person:
          def __init__(self):
              self.name = ''
              self.age = 0
              self.sex = '男'
              self.color = '黄'
      
          def speak(self):
              print('说话')
      
          def think(self):
              print('思考')
      
          def sleep(self):
              print('睡觉')
      
    2. 定义类(创建类)

      """
      语法详情:
      class 类名:
          类属性
          对象属性
          对象方法
          类方法
          静态方法
      
      
      语法简略:
      class 类名:
          类的说明文档
          类的内容
          
      说明:
      类名  -   第一个字母大写,单词采用驼峰式命名(单词之间首字母大写)
      类的内容    -   描述当前这个类是拥有哪些共同属性(变量)和哪些共同功能(函数)的对象的集合
                     包括属性和方法两个部分;
                     属性:对象属性和类属性两种
                     方法:对象方法、类方法、静态方法三种
      方法: 定义在类中的函数就叫方法
      """
      
      class Dog:               # 类名
          """狗类"""           #类的说明文档
          def cry_out(self):  #类的 对象方法
              print('汪汪汪!')
      
      
    3. 创建对象

      1. 对象方法

        """
        怎么定义:直接在类中定义函数
        怎么调用:通过'对象.'的形式来调用
        特点:有一个自带的参数self,这个参数在调用的时候不用传参,因为系统会自动将当前对象传self(谁调用self就指向谁)
        
        语法:
        对象 = 类名()    
        """
        dog = Dog()   # 相当于创建变量作为一个对象, 来调用类里面的 对象方法 并获取返回值
        
        # list1 = [10, 23, 34] # 类似 list列表这个类一样,都是用变量作为对象 来调用list这个类
        # list1.append(100)
        
        
        class Student:
            def study(self, subject):
                # self = stu
                print('self:', self)
                print('学习!', subject)
        
        
        stu = Student()
        print('stu:', stu)
        stu.study('Python')
        
      2. 构造方法

        """
        方法名和类名一样并且是用来创建对象的方法就叫构造方法。
        python中在定义类的时候,系统会自动帮我创建好这个类的构造方法。
        """
        
      3. 初始化方法 -__init__

        """
        1) 当调用构造方法创建对象的时候,系统会自动调用这个类的__init__方法
        2) 创建对象的时候构造方法需不需要参数需要几个,参数类中的__init__方法除了self以外有没有额外的参数有几个
        """
        
        
        class Person:
            def __init__(self):
                print('self:', self)
                print('初始化')
        
        
        p1 = Person()     # 创建一个新的Person对象; Person对象.__init__(); 返回Person对象
        print('p1:', p1)
        
        # p2 = Person()
        
        
        class Dog:
            def __init__(self, x, y):
                print('狗的初始化:', x, y)
        
        
        dog1 = Dog(10, 20)
        
    4. 类的属性(属性分为类属性对象属性两种)

      """
      1)类属性(字段)
      怎么定义:直接定义在类中的变量就是类属性
      怎么使用:通过'类.'的形式来使用
      什么时候用:不会因为对象不同而不一样的属性就需要定义成类属性,例如:圆类中的圆周率
      
      2)对象属性
      怎么定义:以 'self.属性名=值' 的形式定义在 __init__方法中。
      怎么使用:通过'对象.'的形式来使用
      什么时候用:会因为对象不同而不一样的属性就需要定义成对象属性:例如:人类的姓名、年龄、性别;圆的半径
      """
      
      
      class Person:
          # a和num是类属性
          a = 10
          num = 61
      
          def __init__(self):
              # name、age、gender是对象属性
              self.name = '张三'
              self.age = 18
              self.gender = '男'
      
      
      print(Person.a)
      
      p1 = Person()
      print(p1.name, p1.age, p1.gender)
      
      p2 = Person()
      p2.name = '小明'
      p2.age = 20
      print(p2.name, p2.age)
      
    5. 对象属性默认的赋值方式

      # 2. 对象属性默认的值赋值方式
      # 1)给一个固定的默认值:用于对于这个类来讲,绝大部分对象对应的这个属性值都是同一个值
      # 2)给一个没有默认值的参数
      # 3)给一个有默认值的参数
      class Dog:
          def __init__(self, name, breed='土狗', color='白色'):
              self.name = name
              self.age = 2
              self.breed = breed
              self.color = color
      
          # __repr__方法的返回值是什么,打印Dog对象的时候就打印什么。返回值必须是字符串
          def __repr__(self):
              # 打印谁self就指向谁
              # self=dog1
              return f'name:{self.name}, age:{self.age}, breed:{self.breed}, color:{self.color}'
      
      
      dog1 = Dog('大黄', color='黄色')
      print(dog1)    # print(dog1.__repr__())
      
      dog2 = Dog('花花', '泰迪', '黄色')
      dog2.age = 3
      print(dog2)
      
    6. 类的方法 — 类中的函数

      """
      1)对象方法
      怎么定义:直接定义在类中的函数
      怎么调用:通过对象来调用
      特点:自带参数self,调用的时候self不需要传参,系统会自动将当前对象传self(谁调用指向谁)
      什么时候用:如果实现函数的功能需要对象属性就定义成对象方法
      
      2)类方法
      怎么定义:在类中定义函数前加装饰:@classmethod
      怎么调用:通过类来调用
      特点:自带参数cls,调用的时候cls不需要传参,系统会自动将当前类传给cls
      什么时候用:实现函数功能的时候在不需要对象属性的前提下需要类,就定义成类方法
      
      3)静态方法
      怎么定义:在类中定义函数前加装饰:@staticmethod
      怎么调用:通过类来调用
      特点:没有默认参数
      什么时候用:实现函数的功能既不需要对象也不需要类
      """
      
      
      class Circle:
          pi = 3.1415926
      
          def __init__(self, r):
              self.r = r
      
          def area(self):             # 对象方法
              # self = c1; self=c2
              return self.r ** 2 * Circle.pi    # c1.r ** 2 * 3.2415926
      
          @classmethod               # 类方法
          def show_pi(cls):
              print('圆周率:', cls.pi)
      
          @classmethod               # 类方法
          def create_circles(cls, count):
              circles = []
              for _ in range(count):
                  circles.append(cls(1))
              return circles
      
          @staticmethod               # 静态方法
          def message():
              print('静态方法', Circle.pi)
      
      
      c1 = Circle(10)
      print(c1.r)        # 10
      print(c1.area())   # 314.15926
      
      c2 = Circle(1)
      print(c2.area())   #3.1415926
      
      Circle.show_pi()
      print(Circle)     # 圆周率: 3.1415926
      
      print(Circle.create_circles(4))   
        
      Circle.message()   # 静态方法 3.1415926
      

作业

  1. 定义一个矩形类,拥有属性:长、宽 拥有方法:求周长、求面积

    class Rectangle:
        ''''''
        def __init__(self, length, wide):
            self.length = length
            self.wide = wide
    
        # 周长
        def perimeter(self):
            return (self.length + self.wide)*2
    
        # 面积
        def area(self):
            return self.wide * self.length
    
    cls1 = Rectangle(6, 7)
    print(cls1.area())        # 42
    print(cls1.perimeter())   # 26
    
  2. 定义一个二维点类,拥有属性:x坐标、y坐标 拥有方法:求当前点到另外一个点的距离

    class TwoDimensionalPoint:
        def __init__(self, initial_x=0,  initial_y=0):
            self.x = initial_x
            self.y = initial_y
    
        def __repr__(self):
            return f'初始点为({self.x},{self.y})'
    
        # 点与点距离
        def dot_distance(self, current_x, current_y):
            return ((current_x - self.x)**2 + (current_y - self.y)**2)**0.5
    
    cls2 = TwoDimensionalPoint()
    print(cls2.dot_distance(2, 2)) #2.8284271247461903
    
  3. 定义一个圆类,拥有属性:半径、圆心 拥有方法:求圆的周长和面积、判断当前圆和另一个圆是否外切

    class Circle:
        '''圆类'''
        pi = 3.14
        def __init__(self, r, centre_dot_x = 0, centre_dot_y = 0):
            self.r = r
            self.centre_dot_x = centre_dot_x
            self.centre_dot_y = centre_dot_y
    
        # 求圆的周长
        def circle_perimeter(self):
            return Circle.pi * self.r*2
    
        # 求圆的面积
        def circle_area(self):
            return Circle.pi * self.r ** 2
    
        # 判断当前圆和另一个圆是否外切
        def circle_combination(self, centre_x, centre_y, r):
            dot_distance = ((centre_x - self.centre_dot_x)**2 + (centre_y - self.centre_dot_y)**2)**0.5
            if dot_distance == float(r)+float(self.r):
                print(f'圆心({self.centre_dot_x}, {self.centre_dot_y})圆与您输入的圆是外切')
                return
            print(f'圆心为({self.centre_dot_x}, {self.centre_dot_y})的圆与您输入的圆不是外切')
    
    
    csl3 = Circle(6, 5, 6)
    csl3.circle_combination(12, 0, 5) #圆心为(5, 6)的圆与您输入的圆不是外切
    
  4. 定义一个线段类,拥有属性:起点和终点, 拥有方法:获取线段的长度

    class Egment:
        '''线段类;origin和terminus参数为元组,两位'''
        def __init__(self, origin:tuple, terminus:tuple):
            self.origin = origin
            self.terminus = terminus
    
        # 获取线段的长度
        def segment_length(self):
            return ((int(self.origin[0])-int(self.terminus[0]))**2 + (int(self.origin[1])-int(self.terminus[1]))**2)**0.5
    
    cls4 = Egment((0, 0), (5, 9))
    print(cls4.segment_length())  # 10.295630140987
    
  5. 定义一个狗类和一个人类:

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

    class Dog1:
        '''狗类'''
        def __init__(self, name, breed, gender):
            self.name = name
            self.breed = breed
            self.gender = gender
    
        @classmethod
        def cry(cls):
            print('汪汪汪!')
    

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

    class People1:
        '''人类'''
        def __init__(self, name, age, dog = '二哈'):
            self.name = name
            self.age = age
            self.dog = dog
    
        def took_the_dog(self):
            return f'去溜{self.dog}咯!'
    
    cls5 = People1('阿宏', '18', dog='二哈哈')
    print(cls5.took_the_dog()) #去溜二哈哈咯!
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值