python学习day12.0

python基础语法day12

一、面向对象

  1. 面向对象:面向对象是一种思维,使用这种思维设计的程序能够将数据和对数据进行的

    操作封装在一起组成一个类。可以通过类创建对象,通过对象之间的交互来解决问题。

  2. 面向对象编程(OOP,Object Oriented Programming):利用面向对象中类和对象的思维进行问题解决。

  3. 面向过程和面向对象对比:

    • 面向过程:遇到问题,直接自己写代码实现解决问题的程序。
    • 面向对象:遇到问题,想有没有已经存在的解决这个问题的程序。
  4. 洗衣服

  5. 农民(面向过程):

    找个盆子接水,放入脏衣服,放洗衣液,手搓,晾晒。

  6. 小康家庭(函数)

    先自己造洗衣机,接水,放入洗衣液,放入脏衣服,让洗衣机自动的清洗、甩干、烘干,手动晾晒。

  7. 富豪(面向对象)

    请一堆保姆,买一台洗衣机,让保姆每天在固定的时间、地点取脏衣服放入洗衣机清洗,保姆对衣服
    进行晾晒,收取,放回指定的位置。

二、什么是类和对象

    • 人以类聚,物以群分。
    • 类具有相同的属性和方法。
    • 类是抽象的。
    • 一个类可以有多个对象。
  1. 对象

    • 对象是真是存在的能够看到和摸到的具体的事物。
  2. 类和对象如何使用

定义一个学生类:使用关键字class

class Student:
    # 在学生类中给学生构造方法(对象方法)
    def study(self):
        return '学生在学习'

    def play(self, game):
        return f'学生在玩{game}'s
  1. 通过类实例化对象

使用构造器语法创造

s1 = Student()
print(s1)
l1 = list()
l1.append(1)
  1. 对象调用对象方法(这个实例化出来的个人去做他能做的事)
    • 对象.对象方法(对象,参数)
print(s1.study())
print(s1.play('王者荣耀'))
+ 类.对象方法(对象,参数)
print(Student.play(s1, '王者荣耀'))
+ self:行业内约定成俗的一个名字,谁调用方法,self就指向谁

三、对象属性和类属性

class Student:
    # 定义类属性
    schoolUniform = '校服'

    # 初始化方法(设置对象属性)
    def __init__(self, name, sex, age):
        self.name = name
        self.sex = sex
        self.age = age

    # 在学生类中给学生构造方法(对象方法)
    def study(self):
        return f'{self.age}岁穿着{Student.schoolUniform}{self.name}在学习'

    def play(self, game):
        return f'{self.name}在玩{game}'
  1. 给某个对象赋予属性(对象属性)
s1 = Student('张三', '男', 18)
print(s1)
print(s1.play('王者荣耀'))
print(s1.study())
  • 对象属性:对象属性是某个个体自己独有的属性
  • 类属性:整体的这一类共同拥有的特点、属性。
  1. 调用类属性
  • 类名.类属性
print(Student.schoolUniform)
  • 对象.类属性
print(s1.schoolUniform)
  1. 调用对象属性
  • 对象.对象属性
print(s1.name)

四、self说明

class Student:
    # 定义类属性
    schoolUniform = '校服'

    # 初始化方法(设置对象属性)
    def __init__(self, name, sex, age):
        self.name = name
        self.sex = sex
        self.age = age
        print(id(self), '+')

    # 在学生类中给学生构造方法(对象方法)
    def study(self):
        print(id(self), '=')
        return f'{self.age}岁穿着{Student.schoolUniform}{self.name}在学习'

    def play(self, game):
        return f'{self.name}在玩{game}'
s1 = Student('张三', '男', 18)
# id:查看某个数据类型在内存中的地址
print(id(s1), '*')
s1.study()

id():查看某个数据类型在内存中的地址

  • self:行业内约定成俗的一个名字,谁调用方法,self就指向谁
  • self指代被实例化出来的对象,self相当于一个类中各部分传参的介质。

五、练习

定义一个圆类,实现两个圆之间圆心距离的计算,圆的周长和面积
通过半径和圆心距离在判断,是否相切(内切、外切)、相交、相离、内含

class Cricle:
    pi = 3.14

    def __init__(self, r, point):
        self.r = r
        self.point = point

    def area(self):
        return Cricle.pi * self.r ** 2

    def perimeter(self):
        return Cricle.pi * 2 * self.r


C1 = Cricle(4, (0, 0))
print(f'圆C1的面积为{C1.area()}')
print(f'圆C1的周长为{C1.perimeter()}')
C2 = Cricle(3, (3, 4))


def length(Cricle1, Cricle2):
    return ((Cricle1.point[0] - Cricle2.point[0]) ** 2 +
            (Cricle1.point[1] - Cricle2.point[1]) ** 2) ** 0.5


weight = length(C1, C2)
print(f'两个圆的圆心距离为{weight}')

if C1.r + C2.r == weight:
    print('两个圆外切')
elif C1.r + C2.r > weight:
    print('两个圆相交')
elif abs(C1.r - C2.r) == weight:
    print('两个圆内切')
elif C2.r < weight < C1.r or C1.r < weight < C2.r:
    print('两个圆内含')
else:
    print('两个圆相离')

六、对象方法、类方法、静态方法

1.区分

  • 对象方法:在类中定义的对象能够做的事情的方法,叫做对象方法,方法中第一个参数为self,指向对象
  • 类方法:在类中给类定义的方法,需要写语法糖@classmethod,类方法中第一个参数是cls,指向类。
  • 静态方法:在类中定义的普通方法,需要写语法糖@staticmethod,既不指向类,也不指向对象,仅仅是依附于类。

2.调用

  • 对象方法只能是对象调用。
  • 类方法既可以直接使用类进行调用,也可以使用对象调用。
  • 静态方法既可以直接使用类进行调用,也可以使用对象调用。
class Triangle:
    def __init__(self,a,b,c):
        self.a = a
        self.b = b
        self.c = c
# # 类方法
    # @classmethod
    # def isTriangle(cls, a, b, c):
    #     if a + b > c and a + c > b and b + c > a:
    #         return True
    #     else :
    #         return False
# 静态方法
    @staticmethod
    def isTriangle_1(a, b, c):
        if a + b > c and a + c > b and b + c > a:
            return True
        else :
            return False

    def permeter(self):
        return self.a + self.b + self.c

    def ares(self):
        # 海伦公式(秦九韶公式)
        p = (self.a + self.b + self.c) / 2
        return p * (p - self.a) * (p - self.b) * (p - self.c)
a ,b ,c = 3,4,5
# if triangle.isTriangle(a, b, c):
if Triangle.isTriangle_1(a, b, c):
    t1 = Triangle(a, b, c)
    print('能构成三角形')
else:
    print('不能构成三角形')

七、魔法方法

  1. 魔法方法是python定义的一系列由双下划 + 方法名组成的特殊方法。

魔法方法不需要调用,会在合适的阶段自动被触发。如果手动调用魔法方法,可以对魔法方法的功能进行修改。

  1. 常见的魔法方法
  • init:初始化对象属性
  • del:python内存回收机制(ARC),Python可以自动的在一个对象被销毁后回收内存。
  • str:将其他数据类型转字符串:a.%s、str()等被调用时会自动触发本方法。
  • repr:是__str__的备胎
  • add:加法
  • sub:减法
  • truediv:真除法()
  • floordiv:整除
  • mod:取余
class Student:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __repr__(self):
        return f'这是{self.age}岁的{self.name}'


s1 = Student('张三', 18)
print(s1)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值