【第十一课】 面向对象(上)

本文深入讲解了面向对象编程中的类、对象、self、关键魔法方法如__init__、__str__、__new__和__del__的用法,以及普通方法、属性与私有元素的创建与调用。适合初学者理解面向对象编程基础。
摘要由CSDN通过智能技术生成


前言

面向对象是一种程序设计思想。除了面向对象,还有面向过程的思想。
为了方便大家理解,最后有一张思维导图呈现。


一、介绍

在面向对象中,有两个概念很重要。类和对象。
什么是类?

类是抽象的,类代表某一类事物。是一种泛指,比如汽车,房子,人。都是代表一类事物

那么什么是对象呢?

对象是具体的,对象代表具体的某一个事物。比如奔驰,两层的别墅,小明,这些都是具体的某一个事物。

二、创建

类的名称叫类名,类名一般以驼峰命名法,函数一般以蛇形命名法。
类有三部分组成:

  • 类名
  • 类属性
  • 类方法

class Aa_Ba(): # 驼峰命名法
    pass
    

如何实例化一个对象呢?

变量名 = 类名()

在类体外,将类赋值给一个变量,类的括号内可以传参。变量被赋值后,可以调用类的方法

class Aa_Ba():
    def a_b(self):
        print(self)


a = Aa_Ba() # 实例化对象
a.a_b() # 调用对象的方法

三、了解 self

self : 指向当前对象
类实例化之后就是对象,类是泛指一类事物,所以类可以有多个实例化的对象。比如人代表一类事物,小明是一个对象,小红也是一个对象。

self 是只能在类中使用代表当前的对象

class Aa_Ba():
    def a_b(self):
        print(self)


ming = Aa_Ba() # 当前对象为 ming
ming.a_b()

hong = Aa_Ba() # 当前对象为 hong
hong.a_b()

# 输出结果:
<__main__.Aa_Ba object at 0x000002B0F37A4F88> # 代表 ming 对象
<__main__.Aa_Ba object at 0x000002B0F37AA148> # 代表 hong 对象

可以通过对象添加属性(对象可以将自己的属性带个类)
对象.属性 = 值

四、魔法方法

_init_() 方法

前后带有__两个下划线的,我们称之为魔法方法
这里介绍魔法方法之 init初始化方法,也称构造方法
此方法有两个特点需要牢记:

  • 创建对象时,自动执行
  • 此方法用于设置初始值属性,在此处接收对象传递的参数
class A_a():
    def __init__(self, name, sex): # 用于接收参数
        self.name = name # 将接收的参数赋值给自定义的变量名
        self.sex = sex # self.sex 代表当前对象的sex属性

    def get(self):
        print(self.name, self.sex) # 调用self.name,self.sex的属性


xiaoming = A_a('小明', 20) # 实例化对象,并且传入参数
xiaoming.get() # 使用对象调用类中的方法

# 输出结果:
小明 20

_str_() 方法

解释 : 1.将字符串返回到对象处 --> 只能返回字符串
2.用字符串格式化返回多个值

class Students:
    def __init__(self):
        self.name = "hello"
        self.age = 20

    def __str__(self):
        return f"{self.name},{self.age}"


c = Students()  # 将字符串返回到对象处
print(c)

# 输出结果:
hello,20

_new_() 方法

解释 : 用于创建和返回一个对象。不调用时,将创建的对象返回给__init__()方法。如果调用,则先执行此方法

class Demo(object):
    def __init__(self):
        print("__init__")

    def __new__(cls, *args, **kwargs):
        # 打印,当前对象没有创建的成功的!
        print("__new__")
        return super().__new__(cls)   # 创建对象,返回出去


# 1.__new__(cls)-->创建并且返回对象。
# 2.__init__(self)-->创建对象时自动执行的:给对象初始化属性的!
d = Demo()

# 输出结果:
__new__
__init__

_del_() 方法

解释 : 用于释放内存
在当前代码全部执行完毕时自动触发此方法(触发的方式有多种,这里就不一一介绍了)

class Demo(object):
    def __del__(self):
        print("我被回收了!")


d = Demo()
print('hello') # 执行完最后一行代码后,自动触发此方法

# 输出结果:
hello
我被回收了!

五、普通方法与属性

这里有一点比较重要:对象可以直接调用方法,对象调用属性需要 print() 函数输出

创建与调用

class A(): # 创建类
    def one(self): # 定义方法
        self.name = 'hello' # 定义属性


s = A() # 实例化对象
s.one() # 使用对象调用方法
print(s.name) # 使用对象输出属性

调用 :先调用该方法,再输出该属性

六、私有方法和私有属性

普通的方法和属性在类外部可以,而私有方法和私有属性在类的外部无法直接访问。可以通过其他方法访问

创建

直接在方法或者属性前面加双下划线来创建

以下为个人观点:
私有属性可以定义在以下几个地方:

  • _init_() 方法中
class A():
    def __init__(self):
        self.__name = 'hello'
  • 普通方法中
class A():
    def one(self):
        self.__name = 'hello'
  • 私有方法中
class A():
    def __one(self):
        self.__name = 'hello'

调用

不管是调用私有属性还是私有方法,大致就是一个思路。通过内部的方法(A)获取到私有方法或属性,再通过外部方法调用该内部方法(A)

class A():
    def __init__(self):
        self.__name = 'hello'

    def test(self):
        print(self.__name)  # 方法一 : 直接输出私有属性
        return self.__name  # 方法二 : return 把私有属性返回到函数调用处


s = A() # 实例化对象
aaa = s.test() # 自定义变量 aaa 接收私有属性
print(aaa)

# 输出结果:
hello # 调用该方法是输出一次
hello # print() 该属性时又输出一次

精华都在上面的代码里面了


总结

文章内容太多,本章只讲述导图中的前面一部分。后一部分在下一章一一描述。
在这里插入图片描述




注意: 以上思维导图为个人编写,如有错误。还希望各位大佬批评指正。整篇文章全为个人观点,表述不当之处,还请多多谅解。欢迎各位大佬评论交流!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值