面向对象

面向对象编程:oop【object oriented programming】
是一种python的编程思路,关注设计思维,关注点:怎么做

面向过程:按照解决问题的步骤去写代码
在思考问题时,首先分析‘怎么按照步骤去实现’,然后将问题解决拆解若干个步骤,并将这些步骤对应成方法一步一步的最终完成 关注点:谁来做

类:是具有一组相同或者相似特征【属性】和行为【方法】的一系列对象的集合

对象:是实实在在的一个东西,类的具体化
类是对象的抽象化,对象是类的实例化

类(Class)的组成:
类的名称:类名
类的属性:一组数据
类的方法:允许对进行操作的方法(行为)

#定义类和对象
#创建类
class Person:
    age=18
    height=1.75
    weight=60
    def eat(self):#实例方法:在类内部,使用def关键字定义,第一个参数默认是 self【可以是其他名字】,但位置必须占有
        print('吃饭')
    def run(self):
        print('跑步')
#创建对象:对象名=类名()
xm=Person()#类的实例化
xm.eat()#调用函数
print('年龄是:{}'.format(xm.age))

# 属性:在类的内部定义的变量【类属性】
#在方法内部定义的变量【通过类似self.变量】,是实例属性

 

---new函数执行---
----init函数执行------
self=3008833508016
小王喜欢吃西瓜 专业是通信

 

class Animal:
    def __init__(self,name):
        self.name=name
        print('这是构造初始化方法')
        pass
    def __del__(self):
        print('当在某个作用域下面,没有被引用的情况下,解释器会自动调用此函数来释放内存空间')
        print('这是析构方法')
        print('%s 这个对象被彻底清理了,内存空间被释放'%self.name)

cat=Animal('Kitty')
del cat #手动清理对象,会执行del 函数
# print(cat.name)  会报错,cat已被清除
input('程序等待中--')

# 总结
# 1.程序执行完后,会自动调用del方法
# 2 当对象被手动销毁时也会自动调用del方法
# 3.析构函数一般用于资源回收,利用del方法销毁对象回收内存等资源

  

吃饭
年龄是:18
class People:
    def __init__(self,name,sex,age):#默认调用,初始化参数值
        #实例属性
        self.name=name
        self.sex=sex
        self.age=age
    def eat(self):
        print('喜欢吃榴莲')
    pass
# xq=People()
# xq.eat()
# xq.name='小明'
# xq.age=18
# print('{}的年龄是:{}'.format(xq.name,xq.age))
zp=People('张鹏','男生',18)
print(zp.name,zp.sex,zp.age)

#init
# python内置函数,特点:两边是双下划线【魔术方法】
# 初始化方法,用来定义实例属性,初始化函数,在创建对象自动调用,不用手动去调用
# 利用传参的机制可以让我们定义功能更加强大且方便

 

张鹏 男生 18

 

class Person:
    def __init__(self,pro):
        self.pro=pro
        pass
    def eat(self,name,food):
        print('self=%s'%id(self))
        print('{}喜欢吃{} 专业是{}'.format(name,food,self.pro))
        pass
    pass
xw=Person('通信')
print('self=%s'%id(xw))
xw.eat('小王','西瓜' )
#self 只有在定义  实例方法的时候才有意义,在调用时候不必传入相应的参数,而是由解释器自动去指向
#self名称是可以更改的,可以定义成其它的名字。
#self指的是类实例对象本身,相当于Java中的this

 

self=2269554537192
self=2269554537192
小王喜欢吃西瓜 专业是通信

 

#__str__:
class Person:
    def __init__(self,pro,name,food):
        self.pro=pro
        self.name=name
        self.food=food
        print('----init函数执行------')
        pass
    def eat(self,name,food):
        print('self=%s'%id(self))
        print('{}喜欢吃{} 专业是{}'.format(self.name,self.food,self.pro))
        pass
    pass
    def __str__(self):#自定义对象内容格式
        return '{}喜欢吃{} 专业是{}'.format(self.name,self.food,self.pro)

    ##创建对象实例的方法,每调用一次就会生成一个新的对象#
    # cls:class的缩写#
    def __new__(cls, *args, **kwargs):
        print('---new函数执行---')
        return object.__new__(cls)#在这里是真正创建对象实例的,必须有retur关键字
        pass
    pass

xw=Person('通信','小王','西瓜')
print('self=%s'%id(xw))
# xw.eat('小王','西瓜' )
print(xw)
#先执行new对象,再执行init
# new 类的实例化方法,必须有return,否则对象创建失败,至少有一个参数cls,代表要实例化的类
# init 用来数据属性初始化工作,实例构造方法,接受类的实例

 

这是构造初始化方法
当在某个作用域下面,没有被引用的情况下,解释器会自动调用此函数来释放内存空间
这是析构方法
Kitty 这个对象被彻底清理了,内存空间被释放
程序等待中--

  

 

posted @ 2022-07-24 16:53  只愿为你  阅读(40)  评论(0)    收藏  举报