2021.3.25 面向对象基础

总结

01 review

# 1. 正则语法
# 1)匹配类符号
"""
普通字符  -  表示符号本身
.
\d
\s
\D
\S
[普通字符集]
[\da-z1-9\u4e00-\u9fa5]
[.+*?$|(\-)^]
[^字符集]
"""
# 2)检测类符号
"""
\b
\B
^
$
"""
r'\bpython\b'

r'\Bme\b'

# 3) 控制次数
"""
*、*?
+、+?
?、??
{N}
{M,N}、{M,N}?
{,N}、{,N}?
{M,}、{M,}?

贪婪和非贪婪
"""
# 4) 分支
"""
|
()
"""

# 2. re模块
from re import *
# compile()
# fullmatch()
# match()
# search()
# findall()
# finditer()
# sub()
# split()

# 3.参数
# (?i)   flags=I
# (?s)   flags=S
# (?is)  flags=S|I

02编程思想

  1. 面向过程编程(穷人思想) - 逻辑+基本语法
  2. 函数式编程(小资思想) - 函数+逻辑+基本语法
  3. 面向对象编程(富豪思想)- 类和对象 + 函数+逻辑+基本语法

03类和对象

  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 Dog:
        """狗类"""
        def cry_out(self):
            print('汪汪汪!')
    
  3. 创建对象
    语法:
    对象 = 类名()

dog = Dog()

04对象方法

“”"
class 类名:
类属性
对象属性
对象方法
类方法
静态方法
“”"

对象方法

  1. 怎么定义:直接在类中定义函数
  2. 怎么调用:通过’对象.'的形式来调用
  3. 特点:有一个自带的参数self,这个参数在调用的时候不用传参,因为系统会自动将当前对象传self(谁调用self就指向谁)
class Student:
    def study(self, subject):
        # self = stu
        print('self:', self)
        print('学习!', subject)

stu = Student()
print('stu:', stu)
stu.study('Python')

# list1 = [10, 23, 34]
# list1.append(100)

05构造方法和初始化方法

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

  2. 初始化方法 - __ 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)
    

06类中属性

  1. 属性
    属性分为类属性和对象属性两种

    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)
      
  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)
    
    # 练习:定义一个学生类,根据经验确定属性,同时要求打印对象的时候打印所有属性的值
    

07方法

方法 - 类中的函数

  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)
print(c1.area())

c2 = Circle(1)
print(c2.area())

Circle.show_pi()
print(Circle)

print(Circle.create_circles(4))

Circle.message()

作业:

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

    class Rectangle:
        def __init__(self,length,width):
            self.length = length
            self.width = width
    
        def perimeter(self):
            return (self.length+self.width)*2
    
        def area(self):
            return (self.length*self.width)
    
  2. 定义一个二维点类,拥有属性:x坐标、y坐标 拥有方法:求当前点到另外一个点的距离

    class Point:
        def __init__(self,x,y):
            self.x = x
            self.y = y
    
        def distance(self,point_):
            return ((self.x-point_.x)**2 + (self.y - point_.y)**2) ** 0.5
    
    point_ = Point(1,2)
    point = Point(0,0)
    print(point_.distance(point))
    
  3. 定义一个圆类,拥有属性:半径、圆心 拥有方法:求圆的周长和面积、判断当前圆和另一个圆是否外切

    class Circle:
        pi = 3.14
        def __init__(self,r,x,y):
            self.r = r
            self.x = x
            self.y = y
    
        def perimeter(self):
            return self.r*2*self.pi
    
        def area(self):
            return self.r**2*self.pi
    
        def is_circumscribe(self,point_):
            result = ((self.x-point_.x)**2 + (self.y - point_.y)**2) ** 0.5
            if result == self.r + point_.r:
                print("两个圆外切")
            else:
                print('两个圆不外切')
    
  4. 定义一个线段类,拥有属性:起点和终点, 拥有方法:获取线段的长度

    class Line:
        def __init__(self,star,end):
            self.star = star
            self.end = end
        def length(self):
            return abs(self.star - self.end)
    
  5. 定义一个狗类和一个人类:

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

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

    class Person:
        def __init__(self,person_name,age,dog_):
            self.person_name = person_name
            self.age = age
            self.dog_ = dog_
    class Dod:
        def __init__(self,dog_name,gender,breed):
            self.dog_name = dog_name
            self.gender = gender
            self.breed = breed
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值