Python OOP:面向对象基础,定义类,创建对象/实例,self,创建多个对象,添加对象属性,访问对象属性,__init__方法,带参数的__init__,__str__方法,__del__方法

一、理解面向对象

面向对象是⼀种抽象化的编程思想,很多编程语⾔中都有的⼀种思想。

  • ⾯向对象就是将编程当成是⼀个事物,对外界来说,事物是直接使用的,不用去管他内部的情况。⽽编程就是设置事物能够做什么事。
  • 在⾯向对象编程过程中,有两个重要组成部分:类 和 对象。
  • 类和对象的关系:⽤类去创建⼀个对象。(实例化)

类是对⼀系列具有相同特征和行为的事物的统称,是⼀个抽象的概念。

  • 特征即是属性
  • 行为即是方法

类是⼀个抽象的概念,不是真实存在的事物,对象是类创建出来的真实存在的事物

二、面向对象实现方法

1、定义类:
在这里插入图片描述2、创建对象:创建对象的过程也叫实例化对象。
在这里插入图片描述

# 定义people类
class People():
    def person(self):  # 定义实例方法
        print("person startup")
# 创建对象
p1 = People()
# 验证
print(p1) # 打印对象
p1.person() #调用对象方法--对象.方法名()

输出:
<__main__.People object at 0x000001C54AE88288>
person startup

3、self指的是调用该方法的对象。

class People():  #定义类
    def person(self):
        print("i am People class")
        print(self)
p1 = People()  # 创建对象
print(p1)
print("-"*40)
p1.person() #对象调用方法

输出:
<__main__.People object at 0x0000026422AF8308>
----------------------------------------
i am People class
<__main__.People object at 0x0000026422AF8308>  #self的内存地址与对象p1的内存地址相同,所以self是调用该函数的对象

4、一个类创建多个对象

  • 一个类可以创建任意多个对象
  • 每个对象是不同的对象,内存地址不同
# 需求:1,一个类创建多个对象,2,多个对象都调用函数的时候,self地址是否相同
class People():
    def person(self):
        print("i am coming")
        print(self)

p1 = People()
p1.person()

p2 = People()
p2.person()

输出:
i am coming
<__main__.People object at 0x0000026C3D1E8288>
i am coming
<__main__.People object at 0x0000026C3D1EFE88>

5、添加对象属性
属性即是特征,对象属性既可以在类外⾯添加和获取,也能在类⾥面添加和获取。
5.1、在类外面添加属性
在这里插入图片描述
5.2、在类外面访问对象属性
在这里插入图片描述

class People():
    def person(self):
        print("i am coming")

p1 = People()
p1.height = 180
p1.weight = 170
print("p1的身高是{}cm,体重是{}斤。".format(p1.height, p1.weight))

输出:p1的身高是180cm,体重是170斤。

5.3、在类里面访问对象属性
里面:即class缩进的位置
在这里插入图片描述

class People():
    def person(self):
        print("i am coming")
    def print_info(self):
        print("p1的身高是{}cm,体重是{}斤。".format(self.height, self.weight))

p1 = People()
p1.height = 180
p1.weight = 170

p1.print_info()

输出:p1的身高是180cm,体重是170斤。

5.4 在类里面调用类方法

语法:self.方法名()

class People:
    def person(self):
        return "i am coming."
    
    def info(self):
        return "hi,"
    
    def personinfo(self):
        print(self.info(), self.person())


p1 = People()
p1.personinfo()

输出:
hi, i am coming

6、魔法方法:init()方法
在Python中, xx() 的函数叫做魔法方法,指的是具有特殊功能的函数。
思考:对象的宽度高度是与生俱来的属性,可不可以在创建过程中就赋予这些属性呢?
答:理应如此。
init() 方法的作用:初始化对象。

  • init() 方法,在创建一个对象时默认被调用,不需要⼿动调用
  • init(self) 中的self参数,不需要开发者传递,python解释器会自动把当前的对象引用传递过去。
class People():  # 定义类
    def __init__(self):  # 定义init方法,初始化功能
        self.height = 180  # 添加实例属性
        self.weight = 170

    def print_info(self):  # 定义实例方法
        print("身高是{}cm,体重是{}".format(self.height, self.weight))  # 在类里面访问实例属性

p1 = People()
p1.print_info()

输出:身高是180cm,体重是170

7、带参数的__init__()
思考:一个类创建多个对象,且不同的对象设置不同的初始化属性呢?
答:传参数。

class People():
    def __init__(self, height, weight):  # 定义init方法,初始化实例属性,方法里有两个形参,height形参,weight形参
        self.height = height  # self.height是实例的属性,height是形参
        self.weight = weight  # self.weight是实例的属性,weight是形参

    def print_info(self):  #定义实例方法
        print("身高是{}cm,体重是{}斤。".format(self.height, self.weight))
        # 此处的self.height是实例的属性,self.weight是实例的属性


p1 = People(180, 170)  # 创建实例时传入实参
p1.print_info()  # 调用实例方法

p2 = People(165, 100)
p2.print_info()

输出:
身高是180cm,体重是170斤。
身高是165cm,体重是100斤。

如果创建实例时不传参,报错:
在这里插入图片描述

8、魔法方法之__str__()

  • 当使⽤print打印对象名不加括号的时候,默认打印对象的内存地址。
  • 如果类定义了 str 方法,那么就会打印这个方法中 return 的数据。
  • str()方法一般放的是解释说明的文字
  • 注意:str()方法,用return关键字,后面写要返回的内容,调用时用print
class People():
    def __init__(self, height, weight):  # 定义init方法,初始化属性,方法里有两个形参
        self.height = height  # self.height是实例的属性,height是形参
        self.weight = weight  # self.weight是实例的属性,weight是形参

    def print_info(self):  #定义实例方法
        print("身高是{}cm,体重是{}斤。".format(self.height, self.weight))
        # 此处的self.height是实例的属性,self.weight是实例的属性

p1 = People(180, 170)  # 创建实例时传入实参
print(p1)

输出:<__main__.People object at 0x0000020D3888FE88>
 # 当使⽤print打印对象名不加括号的时候,默认打印对象的内存地址。
class People():
    def __init__(self, height, weight):  # 定义init方法,初始化属性,方法里有两个形参
        self.height = height  # self.height是实例的属性,height是形参
        self.weight = weight  # self.weight是实例的属性,weight是形参

    def print_info(self):  #定义实例方法
        print("身高是{}cm,体重是{}斤。".format(self.height, self.weight))
        # 此处的self.height是实例的属性,self.weight是实例的属性

    def __str__(self):
        return "这是__str__方法解释说明文字,类的说明,对象状态说明"


p1 = People(180, 170)  # 创建实例时传入实参
print(p1)

输出:这是__str__方法解释说明文字,类的说明,对象状态说明

9、魔法方法之__del__()

  • 当删除对象时,python解释器也会默认调用 del() 方法。
  • 当没有手动删除对象时,只要程序自上而下运行结束会自动调用__del__方法,内存删除程序运行时的变量、类、对象等,释放内存
class People():
    def __init__(self):
        self.width = 300
        
    def __del__(self):
        print("was deleted!")

p1 = People()

输出:was deleted!

三、基础总结

思考参与这个需求的事物一共有哪些,划分出事物之后,对事物进行上归类,分出来多少个分类,就创建多少个类,再用类去创建对象。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
魔法方法都不需要手工调用,当程序满足条件自动调用。

PS: source, bilibili

猜你喜欢

转载自blog.csdn.net/weixin_47008635/article/details/114497264