一、面向对象技术简介:

  • 类Class:用来描述具体相同的属性和方法的对象的集合。定义了该集合中每个对象所共有的属性和方法。--(类是一个模型,一个种类,一个蓝图)
  • 对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。--(就是类的实例)
  • 数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据。
  • 类方法:
    @classmethod
            def shuoming(cls):
                cls代表的就是当前这个类
                pass
    
            1、不需要实例化就可以调用的,直接类名.xxx
            self.shuoming()也可以调用
            2、调用不了实例方法和实例变量
  • 实例方法:函数入参有self的,就是实例方法,必须实例化之后才能使用。
  • 实例:实例就是对象。
  • 实例化:创建一个类的实例,类的具体对象。
  • 实例变量:在类的声明中,属性是用变量来表示的。这种变量就称为实例变量,是在类声明的内部但是在类的其他成员方法之外声明的。--(如果变量前面加了self的话,在这个类里面,其他的函数都可以使用这个变量。必须得实例化之后才可以用。)
  • 类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。--(是公共的,谁都可以用,不需要实例化,直接在类里面定义的变量,不需要实例化就可以使用,self.xxx)
  • 局部变量:定义在方法中的变量,只作用于当前实例的类。
  • self:本类对象
  • 静态方法:只是写在类里面而已,它调用不了类方法、类变量、实例方法、实例变量,通过类名.xx使用;但类方法、实例方法可以调用它
  • 属性方法:看起来像变量的一个方法。
类的执行顺序:

类实例化 -> 构造函数-> 程序执行完->析构函数

1、举例:将买车的过程化零为整为买车处

class BuyCar:#类名一般用大写字母定义,这个类含义为买车处,化零为整
    def shop(self):#在类中定义函数,会自动加入self,带self方法的必须实例化才能用
        print('4s店')

    def baoxian(self):
        print('保险公司')

    def shuiwuju(self):
        print('税务局')

    def cheguansuo(self):
        print('车管所')

xiaowang = BuyCar()# BuyCar()类名加上括号就是实例化,xiaowang就是一个实例又叫对象
# BuyCar.shop()#类不能直接用,会报错TypeError: shop() missing 1 required positional argument: 'self'
xiaowang.shop()#实例调用类中的方法
xiaowang.baoxian()
xiaowang.shuiwuju()
xiaowang.cheguansuo()

2、举例:上帝造人

class Person:
    country = 'China'#country为类变量,公共的,谁都可以用
    def __init__(self,name,leg=2):#构造函数,类在实例化的时候,自动执行
        # 加上self,在整个类里其他函数都可以用
        self.name = name#属性
        self.leg = leg
        print('self的内存地址',id(self))
    def __del__(self):#析构方法,类实例被销毁的时候自动执行析构方法里面的代码
        print('什么时候执行到这里的方法呢')
    def fly(self):#方法
        print('%s会飞'%self.name)
        self.bird = '猫头鹰'#self不只可以加到init中,可以加到类里的其他方法中
    def eat(self):
        print('%s会吃饭'%self.name)
        print('我要吃%s'%self.bird)

    def la(self):
        print('拉了%s次' % self.count)

    def say(self):
        print('我的名字是【%s】,我有【%s】条腿'%(self.name,self.leg))
        print('国籍是%s'%self.country)#必须用self.country,直接写country会报错