文章目录
前言
面向对象是一种程序设计思想。除了面向对象,还有面向过程的思想。
为了方便大家理解,最后有一张思维导图呈现。
一、介绍
在面向对象中,有两个概念很重要。类和对象。
什么是类?
类是抽象的,类代表某一类事物。是一种泛指,比如汽车,房子,人。都是代表一类事物
那么什么是对象呢?
对象是具体的,对象代表具体的某一个事物。比如奔驰,两层的别墅,小明,这些都是具体的某一个事物。
二、创建
类的名称叫类名,类名一般以驼峰命名法,函数一般以蛇形命名法。
类有三部分组成:
- 类名
- 类属性
- 类方法
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() 该属性时又输出一次
精华都在上面的代码里面了
总结
文章内容太多,本章只讲述导图中的前面一部分。后一部分在下一章一一描述。