天天看点

Day 7 python OOP面向对象上OOP面向对象上

OOP面向对象上

介绍

Python——万物皆对象

面向过程——根据业务逻辑自上而下写代码

函数式——功能代码封装到函数中

OOP——将数据与函数绑定到一起,进行封装

类和对象

类Class——具有一组相同或相似属性和方法的移类对象的组合

对象——类的实例化

Class构成:

  1. 类名
  2. 类属性——数据
  3. 类方法——行为

类和对象

实例方法——在类的内部,用def关键字来定义,第一个参数为self【名字表示可以是其他名字,但位置必须被占用】

实例方法归类的实例所有

类属性——在类的内部定义的属性

实例属性——定义在方法内部定义,使用self引用的属性

def __init__(self):
        self.name='deer'    #实例属性
        pass
           
#定义类和对象

class Person:
    #对应人的特征
    #name='Deer'         #类属性
    age=22              #类属性
    #对应人的行为

    def __init__(self):
        self.name='deer'    #实例属性
        pass

    #实例方法
    def eat(self):
        print('吃饭了')
        pass

    def run(self):
        print('跑')
        pass
#创建对象           对象名=类名()
deer = Person()
#调用方法
deer.eat()
print('{}的年龄是{}'.format(deer.name,deer.age))
           

__ init __方法

  1. python内置函数 具有特殊函数
  2. __ __称为魔术方法
  3. 初始化方法,用来定义实例属性和初始化数据,创建对象是自动调用
  4. 利用传参机制是定义功能更加方便
class People:

    def __init__(self,name,age):
        '''
        实例属性声明,初始化操作,构造函数
        '''
        self.name=name              #实例属性
        self.age=age
        pass

    def eat(self,food):
        '''
        吃的行为
        :return:
        '''
        print(self.name+'吃'+food)
        pass
    pass

#每次都要添加
deer=People()
deer.name='Deer'        #添加实例属性
deer.age=22             #添加实例属性
print(deer.age)

bob=People()
bob.name='Bob'        #添加实例属性
bob.age=20             #添加实例属性
print(bob.age)

nb=People()
print(nb.name)         #直接输出实例属性默认值
nb.name='qwe'          #可以修改实例属性
print(nb.name)






#__init__改进
zxc=People('zxc',18)
print(zxc.name,zxc.age)
zxc.eat('banana')

asd=People('asd',22)
print(asd.name,asd.age)
asd.eat('apple')
           

self

self和对象指向同一个地址

特点:

  1. self只有在类中定义实例方法的时候才有意义,调用是不用传入相应参数,而使由解释器自动指向
  2. self的名字可以更改
  3. self值得是类实例对象本身,相当于Java中this
class Person:

    def __init__(self,pro):
        '''

        :param pre: 专业
        '''
        self.pro=pro            #实例属性
        pass
    '''
    定义类
    '''
    def eat(self,name,food):
        '''
        实例方法
        :return:
        '''
        print('%s喜欢吃%s   专业是%s' % (name,food,self.pro))
        pass
    pass
xw=Person('computer')               #__init__传参
print('xw=%s'%id(xw))
xw.eat('小王','apple')

           

魔术方法

魔术方法—— __ xxxx __

class Person:
    '''
        定义类
    '''

    def __init__(self, pro, name, food):
        '''

        :param pre: 专业
        :param name: 姓名
        :param food: 食物
        '''
        self.pro = pro  # 实例属性
        self.name = name
        self.food = food

        print('--------init---------')
        pass

    def eat(self, name, food):
        '''
        实例方法
        :return:
        '''
        print('%s喜欢吃%s   专业是%s' % (name, food, self.pro))
        pass

    # __str__
    def __str__(self):  # 打印对象信息
        '''
        打印对象 自定义对象 是内容格式
        :return:
        '''
        return '%s喜欢吃%s   专业是%s' % (self.name, self.food, self.pro)

    # 创建对象
    def __new__(cls, *args, **kwargs):
        '''
        创建对象实例的方法    每调用依次  创建一个新的对象class——cls

        场景:可以控制船舰对象的一些属性设置   常用来做单例模式的时候来使用
        :param args:
        :param kwargs:
        '''
        print('---------new-----')
        return object.__new__(cls)  # 返回对象  创建对象的实例
        pass

    pass


xw = Person('computer', '小王', 'banana')
print(xw)