day17-面向对象 -5.19

回顾

  1. 正则语法
  • 匹配类:
    • 多行匹配,不能和\n匹配,单行匹配可以和\n匹配
  • 检测类 \b \B ^ $
  • 匹配几次 * + ? ()\N {N}
  • 分组()和分支|
  • 转义符合\
  1. re模块

from re import fullmatch match search finditer split sub I S

总结

类和对象

  1. 定义类(创建类)

    '''
    定义类用代码描述清楚你这个类是拥有那些相同功能那些相同属性的对象的集合
    功能 -对应的是函数
    属性- 保存数据的变量(再类中叫属性)
    
    语法:
    class 类名:
        类的说明文档
        类的内容
        
    说明:
    class - 关键字,固定写法
    类名 -- 程序员自己命名  只能是字母
            要求:是标识符,不是关键字
            规范:见名知义;驼峰式命名(单词之间采用首字母大写)(不能下划线),首字母大写
            
    : -- 固定写法
    类的说明文档 - 本质就是多行注释
    类的内容 - 包括属性和方法
            属性分为:类属性(类的字段)和对象属性
            方法分为:对象方法,类方法和静态方法
    
    注:方法就是定义在类中的函数       
    '''
    int
    class  Student:
      '''
      学生类
      '''
       pass
    
  2. 定义对象(创建对象

    '''
    语法:类()
    
    '''
    list()
    stu1 = Student()
    stu2 = Student()
    

对象方法

  1. 定义在类中的函数就是方法

  2. 对象方法

    '''
    怎么定义:直接定义在类中的函数(定义函数前不用加装饰器)
    怎么调用: 用对象来调用=-对象点.函数名()
    特殊:自带参数self ,再调用的时候self 不用传参,系统会自动将当前对象传给self(谁调用
    
    '''
    class  Person:
        '''人类'''
        def sleep(self):
            print('睡觉')
        def eat(self,food):
            print(f'吃{food}')
    
    
    p1 = Person() #创建对象
    p1.sleep()
    

构造方法和初始方法

  1. 构造函数/构造方法
  • 函数名和类名相同,并且是用来创建对象的方法就是构造方法

  • python的构造函数再创建类的时候由系统自动创建,程序员只需要再创建对象的时候自动调取

    # 1.构造函数/构造方法
    # 函数名和类名相同,并且是用来创建对象的方法就是构造方法
    # python的构造函数再创建的类的时候由系统自动创建,程序员只需要再创建对象的时候自动调取
    '''
    定义类的时候可以根据需求再类中添加对象方法: __init__ 
    添加的时候要保证函数名是__init__,第一个参数是self,除此之外我们可以随意添加函数体和参数
    
    每次使用类创建对象的时候,系统会自动调用这个类中的__init__方法
    调用构造方法创建对象的时候需不需要参数,需要几个参数看这个类的__init__方法 
    除了self以外有没有额外的参数。
    
    
    魔法方法:类中这个方法名由__开头并且以__结尾的方法就是魔法方法,所以的魔法方法都是自己调用
    所有的魔法方法都已经写好了 都是固定的
    
    '''
    
  1. 初始化方法 init
class Dog:
    def __init__(self):

# 下面的这个函数的定义由系统自动完成
'''
def Dog():
    pass xin新建好的对象 = 创建对象并且申请内存保存对象
    新建好的对象.__init__()
    return 新建好的对象
    '''
# 补充:
# def __init__():
#     pass
def __init__():
    print('__init__')

# def Cat( ):
#     pass
def Cat(*args,**kwargs):
    __init__(*args,**kwargs)

cat1 = Cat()

属性方法

  1. 属性是用来描述类的数据特征。属性的本质是保存数据的变量。
  2. 对象属性和类属性
'''
1)类属性
怎么定义: 直接定义再类中的变量就是类属性
怎么使用: 同类来使用 类.类属性
什么时候用:属性的值不会因为对象不同而不一样,这种属性就是定义成类属性

2)对象属性
怎么定义:以'self.属性名=值'的形式定义在__init__方法中
怎么使用:通过对象来使用,对象.对象属性
什么时候用:属性的值会因为对象不同而不一样,这种属性就是定义成对象属性

'''
class Person:
    # num 就是类属性
    num = 34

    # name age gender 对象属性
    def __init__(self):
        self.name = '小猫'
        self.age = 18
        self.gender= '男'
print(Person.num)
Person.num = 23
print(Person.num)

p1 = Person()
print(p1.name,p1.age,p1.gender)
p1.name = 'huahua'
print(p1.name)
  1. 对象属性赋初始值的三种方式
'''
方式1:赋一个固定的值,
方式2:使用没有默认值的参数赋值
方式3:使用有默认值的参数赋值

'''
class Dog:
    def __init__(self,name,color,breed = '土狗',gender = '母'):
        self.breed = breed
        self.name = name  #meiy没有默认值的参数
        self.gender = gender
        self.color = color
        self.age = 1 #赋固定值
    #     __repr__方法在当前类的对象被打印的时候会被自动调用,这个方法的返回值(必须是字符串)是什么就打印什么
    def __repr__(self):
        # 打印谁,self就是谁
        # return f'{self.name,self.breed,self.gender,self.color,self.age}'
        # return str(self.__dict__)
        return f'<{str(self.__dict__)[1:-1]}>'

dog1 = Dog('财产','黄色')
print(f'dog1:{dog1}')

dog2 = Dog('huahu','白色')


# 练习:定义一个商品类,拥有属性:价格、名称、产地、类型、生产日期、保质期
# 要求:创建对象的时候价格、名称、生产日期必须赋值; 其他属性可以赋值也可以不赋值,产地默认温州、保质期默认1年、类型默认是食品
# 打印对象的时候打印商品基本信息
class Goods():
    def __init__(self,price,name,date,producing_area='温州',expirationdate=1,typee='食品'):
        self.price = price
        self.name = name
        self.producing_area = producing_area
        self.typee = typee
        self.date = date
        self.expirationdate= expirationdate

    def __repr__(self):
        return f'<{str(self.__dict__)[1:-1]}>'

good1 =Goods(23,'gugu','2020-5-23')
print(f'Goods:{good1}')

方法

"""
1. 对象方法
怎么定义:直接在类中定义函数(函数前不加装饰器)
怎么调用:对象.对象方法()
特点:自带参数self, self不用传参,谁调用self就指向谁。
什么时候用:如果实现函数的功能需要用到对象,一定是对象方法

2. 类方法
怎么定义:在定义函数前加装饰器@classmethod
怎么调用:类.类方法()
特点:自带参数cls,cls不用传参,系统将当前类传个cls (谁调用就指向谁)
什么时候用:实现函数的功能,在不需要对象属性的时候需要类就使用类方法

3. 静态方法
怎么定义:在定义函数前加装饰器@staticmethod
怎么调用:类.静态方法
特点:没有默认参数
什么时候用:实现函数的功能既不需要当前类的对象也不需要当前类,就使用静态方法
"""


class Test:

    def func1(self):
        print('对象方法')

    @classmethod
    def func2(cls):
        # cls = Test
        print(f'cls: {cls}')
        print('类方法')

    @staticmethod
    def func3():
        print('静态方法')


t1 = Test()

# 用对象调用对象方法
t1.func1()

# 用类调用类方法
Test.func2()
print(f'Test:{Test}')


class Circle:
    pi = 3.1415926

    def __init__(self, radius):
        self.radius = radius

    def area(self):
        return self.radius ** 2 * Circle.pi

    @classmethod
    def set_pi(cls, value):
        cls.pi = value

作业

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

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

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

    class Dog():
        def __init__(self,name,gender,breed):
            self.name= name
            self.gender = gender
            self.breed= breed
    
        # def __repr__(self):
        #     return f'<{str(self.__dict__)[1: -1]}>'
    
        def call_out(self):
    
            return '叫唤'
    dog1 = Dog('汪汪','公','土狗')
    print(dog1.call_out())
    
    class Person():
        def __init__(self,name,age,dog):
            self.name= name
            self.age=age
            self.dog = dog
    
        def walk_the_dog(self):
            return  f'快跑,{self.dog.name}'
    
    person1 = Person('小猫',18,dog1)
    # person1.dog=dog1
    print(person1.walk_the_dog())
    
  2. 定义一个矩形类,拥有属性:长、宽 拥有方法:求周长、求面积

    class Rectangle():
        def __init__(self,long,wide):
            self.long= long
            self.wide= wide
    
        def perimeter(self):
            return  (self.long +self.wide) * 2
    
        def sea(self):
            return self.long *self.wide
    
    rectangle1 = Rectangle(10,34)
    print(f'周长:{rectangle1.perimeter()},面积:{rectangle1.sea()}')
    
  3. 定义一个二维点类,拥有属性:x坐标、y坐标 拥有方法:求当前点到另外一个点的距离

    class Twodimension():
        def __init__(self,x,y):
            self.x= x
            self.y= y
    
        def length(self, dimension):
            # return round(((y2-self.y)**2 + (x2-self.x)**2)**0.5,2)
            return round(((dimension.y-self.y)**2 + (dimension.x-self.x)**2)**0.5,2)
    
    
    twodimension1 = Twodimension(3,6)
    twodimension2 = Twodimension(13,18)
    print(twodimension1.length(twodimension2))
    
  4. 定义一个圆类,拥有属性:半径、圆心 拥有方法:求圆的周长和面积、判断当前圆和另一个圆是否外切

    class Circle():
        pi = 3.14159
        def __init__(self, radius,center):
            self.radius= radius
            self.center= center
    
        def perimeter(self):
            return 2*self.pi*self.radius
        def sea(self):
            return self.pi*self.radius**2
    
        def exterior_contact(self, circle2):
            center_distance_square = sum(list(map(lambda item1, item2: (item1-item2)**2, self.center, circle2.center)))
            sum_radius_square = (self.radius+circle2.radius) ** 2
            if center_distance_square == sum_radius_square:
                return True
            else:
                return False
    
    circle1 = Circle(4,(2,4))
    circle3 =Circle(4,(5,7))
    print(circle1.exterior_contact(circle3))
    print(circle1.perimeter(),circle1.sea())
    
  5. 定义一个线段类,拥有属性:起点和终点, 拥有方法:获取线段的长度

    class Segment():
    
        def __init__(self, origin: Twodimension,destination: Twodimension):
            self.origin= origin
            self.destinationr= destination
    
       
        def length(self):
            return self.origin.length(self.destinationr)
          
    start = Twodimension(12, 34)
    end = Twodimension(-13, 4)
    seg1= Segment(start,end)
    
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值