# 面向对象编程

本文介绍了面向对象编程的基本概念,包括类和对象的定义、对象属性和类属性、self的使用,以及对象方法、类方法和静态方法的区别。同时,探讨了Python中的魔法方法,如初始化方法`__init__`、内存回收的`__del__`以及字符串转换方法`__str__`和`__repr__`等。
摘要由CSDN通过智能技术生成

面向对象编程

一、面向对象:面向对象是一种思维,使用这种思维设计的程序能够将数据和对数据进行的
操作封装在一起组成一个类。可以通过类创建对象,通过对象之间的交互来解决问题
二、面向对象编程(OOP,Object,Oriented,Programming):利用面向对象中类和对象的思维进行问题解决
三、 面向过程和面向对象对比:
面向过程:遇到问题,直接自己写代码实现解决问题的程序
面向对象:遇到问题,想有没有已经存在的解决这个问题的程序

什么是类和对象

  1. 人以类聚,物以群分
  2. 类具有相同的属性和方法
  3. 类是抽象的
  4. 一个类可以有多个多象
  • 对象
    对象是真的存在的能够看到和摸到的具体的事物
  • 类和对象如何使用
  1. 定义一个学生类:使用关键字class
class Student:
    # 在学生中给学生构造方法(对象方法)
    def study(self):
        print(self)
        return '学生在蹦迪'
    def play(self,game):
        return f'学生在{game}'
        #2.通过类实例化对象
# 使用构造器语法创建对象
s1 = Student()
s2 = Student()
print(s1)
l1 = list()
l1.append(1)
# 3.对象调用对象方法(这个实例化出来的个体去做他能做的事)
# a.对象.对象方法(参数)
print(s1.study())
print(s2.study())
print(s1.play('撩妹'))
# b.类.对象方法(对象,参数)

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}'

#给某个对象赋予属性(对象属性)

s1 = Student('lyx','女',20)
print(s1)
print(s1.play('旅游'))
print(s1.study())
# 对象属性:对象属性是某个个体自己独有的属性
# 类属性: 整体的一类共同拥有的特点、属性

#调用类属性
#1.类名.类属性
print(Student.schoolUniform)
#对象.类属性
print(s1.schoolUniform)
#调用对象属性
#对象.对象属性
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('lyx','女',20)
# id查看某个数据类型在内存中的地址
print(id(s1), '*')
s1.study()
# self:行业内约定成俗的名字,谁调用方法,self就指向谁
# self指代被实例化出来的对象,self相当于一个类中各部分传参的介质。

对象方法,类方法,静态方法

  • 如何区分
  1. 对象方法:在类中定义的对象能够做的事情的方法,叫做对象方法,方法中第一个参数为self,指向对象
  2. 类方法:在类中给类定义的方法,需要写语法糖@classmethod,类方法第一个参数是cls,指向类
  3. 静态方法;在类中定义的普通方法,需要写语法糖@staticmethod,既不指向类,也不指向对象,仅仅是依附于类。
  • 如何调用
  1. 对象方法只能对象调用
  2. 类方法既可以直接使用类进行直接调用,也可以使用对象调用
  3. 静态方法既可以直接使用类进行直接调用,也可以使用对象调用
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 area(self):
        "海伦公式(秦九韶公式)"
        p = self.a +self.b + self.c
        return (p / 2 * (p / 2 - self.b)*(p / 2 - self.b)*(p / 2 - self.b)) ** 0.5
a,b,c=3,3,2
# if triangle.isTriangle(a,b,c):
if triangle.isTriangle_1(a,b,c):
    t1 = triangle(a,b,c)
    print(t1.area())
else:
    print('这不是三角形')

魔法方法

  • 魔法方法是Python定义的一系列由双下划线 + 方法名组成的特殊方法
    魔法方法不需要调用,会在合适的阶段自动被触发。如果手动调用魔法方法,可以对魔法方法功能进行修改
  • 常见的魔法方法
  1. init:初始化属性
  2. del:python内存回收机制(ARC),Python可以自动的在一个对象被销毁后回收内存
  3. str:将其他数据类型转字符串:a.%s,str()等被调用时会自动除法本方法。
  4. repr:是__str__的备胎
  5. add:加法
  6. sub:减法
    7.truediv:真除法(\)
  7. floordiv:整除
  8. 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)
lf,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、付费专栏及课程。

余额充值