• python--面向对象


    面向对象:指挥者

    类:一个模板

    对象和实例:就是根据这个模板造出来的东西

    实例化:把模型做成实例的过程

    属性:类里面的变量
    方法:类里面的函数

    构造函数:类在初始化的时候做的一些操作,实例化是会自动执行
    析构函数 :函数被销毁时执行的

    self:代表的就是本类对象

    实例变量:必须实例化之后才能用的变量

    类变量:不需要实例化就可以用,定义在类里面定义的,是公用的

    属性方法:看着像变量的方法

    私有变量/方法:在变量/函数 前面加__ ,只能在类里面被调用,出了类就不能用了

    类方法:类里面定义的公共方法,不需要实例化就可以调用
    什么时候用类方法:
    这个方法里面没有用到实例变量或者没有调用实例方法,只用到了类变量时

    实例方法:实例方法必须实例化之后才可以使用 实例方法里面可以随便调用类方法、类变量

    静态方法:只是定义在类里面的一个普通函数而已
    什么时候用静态方法:
    如果这个函数没有用到类变量、类方法、实例变量、实例方法,就可以把它定义成静态方法
    类方法、实例方法 可以随便调用静态方法
    class People:  #定义类:类名第一个字母大写    经典类
    # class People(object):  #新式类
    
        eye = 2     #属性
        mouth = 1
        shengao = 180
        money = 1000000
    
        def __init__(self, name):  # 构造函数
            self.name = name
            print('造了一个人,这个人是%s' % name)
    
        def cry(self):       #方法
            print('')
    
        def makeMoney(self):   #方法
            print(id(self))
            print('%s 挣了20w' %self.name)
    
    
    niuniu = People('牛牛')   #实例化一个对象,niuniu; 构造方法中必须传入一个name参数 ,不传会报错
    print('牛牛的内存地址',id(niuniu))  #niuniu的内存地址和self的内存地址是一样的,说明类中的self就是代表当前实例
    niuniu.makeMoney()   # 简化写法,调用类中的方法  makemaney(self),self是必填参数,调用的时候python自动把niuniu这个对象传给了makemaney()
    People.makeMoney(niuniu) #原始写法,将niuniu传给makeMoney()

    oop_mysql.py

    import pymysql
    class MySql:
        # 初始化的时候创建一个数据库连接,和一个游标
        def __init__(self,host,user,password,db,port=3306,charset='utf8'):
            self.conn = pymysql.connect(host = host,user = user,password = password,db = db,port = port,charset = charset)
            self.cur =self.conn.cursor(cursor=pymysql.cursors.DictCursor)
    
        def excute_many(self,sql):  #从数据库中返回所有数据
            self.cur.execute(sql)
            return self.cur.fetchall()
    
        def excute_one(self,sql): #从数据库中返回一条数据
            self.cur.execute(sql)
            return self.cur.fetchone()
    
        def __del__(self):  #析构函数(在实例被销毁的时候自动执行)  关闭连接
            self.cur.close()
            self.conn.close()
    
    db = MySql('118.24.3.40','jxz','123456','jxz')
    res = db.excute_one('select * from app_myuser where username="hahaha";')
    print(res)
    res = db.excute_many('select * from app_myuser limit 20;')
    print(res)

    类变量、实例变量、属性方法

    class People:
        country = 'China' #类变量  不需要实例化就能用
        def __init__(self,name,sex):
            self.name = name   #实例变量
            self.sex = sex
    
        def say(self):
            print('name '+self.name)
            print('sex '+self.sex)
            print('country '+self.country)
    
        @property             #属性方法   
        def get_name(self):   #将一个函数变成了一个变量来用,变量的值就是函数的返回值,函数没有入参时可以这样用
            return self.name
    
    print(People.country) #类变量,不用实例化就可以使用
    xiaojun = People('xiaojun','male')
    xiaojun.say()
    print(xiaojun.get_name)

    继承

    class Student:
        def sql(self):
            print('sql')
        def linux(self):
            print('linux')
    
    class PyStudent(Student):
        def python(self):
            print('python')
    
    class XnStudent(Student):
        def xn(self):
            print('xn')
        def sql(self):  #重写父类方法
            print('mysql')
    
    py = PyStudent()
    py.linux()   #linux
    py.sql()    #sql
    py.python() #python
    
    xn = XnStudent()
    xn.linux()  #linux
    xn.sql()    #mysql

     子类中通过super()调用父类中的方法

    class Lw:
        def about_me(self,name):
            print('[%s]会抽烟喝酒烫头'%name)
    
    
    class Xw(Lw):
        def about_me(self,name,age):   
            super().about_me(name)   #super指的就是父类  super()--实例化父类
            print('年龄是', age)   #子类中加了一个方法
    
    
    wxm = Xw()
    wxm.about_me('王小明',18)

    私有变量、私有方法、类变量、类方法

    class DB:
        port = 3306  #类变量
        def __init__(self,host,user,password,db):
            self.host = host       #实例变量、成员变量
            self.__user = user     #私有变量(前面加__)  出了类就不能用了
            self.__password = password
            self.db = db
    
        def sql(self,sql):   #实例方法  加了self的都是实例方法(self告诉你是哪个实例调用的该方法),不初始化实例是不能调用的
            print('执行sql')
    
        @classmethod      #类方法  直接用类名调用,不需实例化
        def help(cls):    #当方法里面没有用到实例变量或者没有调用实例方法的时候,只用到了类变量时就可以定义成一个类方法
            print('cls的内存地址',id(cls))  #id(cls) 和 id(DB)是一样的   cls代表的就是DB这个类
    
        def __help(self):    #私有函数  只能在类里面用
            print(self.host)
            print(self.__user)    #类里面可以调用私有变量
            print(self.__password)
            print(self.db)
    
        def get_port(self):
            print(self.port)
    
    
    d = DB('127.0.0.1','lh','123456','mine')
    d.sql('sql')
    print(d.__user)  # 报错  AttributeError: 'DB' object has no attribute '__user'
    d.__help()      #报错   AttributeError: 'DB' object has no attribute '__help'
    
    
    mysql = DB()
    mysql.get_port()    #3306
    mysql.port = 3307   #给mysql实例加了一个port=3307  并没有改变类变量 DB.port=3306
    mysql.get_port()   #3307
    
    print(DB.port)    #3306
    oracle = DB()
    oracle.get_port()  # 3306  oracle实例没有加port ,所以还是等于类变量port = 3306
    
    DB.port=3308  #修改类变量
    
    # 类名.类变量 = XX  修改类变量的值
    #  self.属性 =XX  实例名.属性 =XX  修改的都是实例属性的值,不影响类变量
    
    DB.get_port()  #不能调用   加了self的方法,不初始化实例是不能调用的
    
    DB.help()   #cls的内存地址 3180534563992
    print(id(DB)) #3180534563992

    静态方法

    import turtle  as t
    import time
    
    class Pig:
        words = '爱你呦'   #类变量
    
        @classmethod     #类方法
        def peiQi(cls):
            t.pensize(4)
            t.hideturtle()
            t.colormode(255)
            t.color((255, 155, 192), "pink")
            t.setup(840, 500)
            t.speed(0.5)
    
            # 鼻子
            t.pu()
            t.goto(-100, 100)
            t.pd()
            t.seth(-30)
            t.begin_fill()
            a = 0.4
            for i in range(120):
                if 0 <= i < 30 or 60 <= i < 90:
                    a = a + 0.08
                    t.lt(3)  # 向左转3度
                    t.fd(a)  # 向前走a的步长
                else:
                    a = a - 0.08
                    t.lt(3)
                    t.fd(a)
            t.end_fill()
    
            t.pu()
            t.seth(90)
            t.fd(25)
            t.seth(0)
            t.fd(10)
            t.pd()
            t.pencolor(255, 155, 192)
            t.seth(10)
            t.begin_fill()
            t.circle(5)
            t.color(160, 82, 45)
            t.end_fill()
    
            t.pu()
            t.seth(0)
            t.fd(20)
            t.pd()
            t.pencolor(255, 155, 192)
            t.seth(10)
            t.begin_fill()
            t.circle(5)
            t.color(160, 82, 45)
            t.end_fill()
    
            #
            t.color((255, 155, 192), "pink")
            t.pu()
            t.seth(90)
            t.fd(41)
            t.seth(0)
            t.fd(0)
            t.pd()
            t.begin_fill()
            t.seth(180)
            t.circle(300, -30)
            t.circle(100, -60)
            t.circle(80, -100)
            t.circle(150, -20)
            t.circle(60, -95)
            t.seth(161)
            t.circle(-300, 15)
            t.pu()
            t.goto(-100, 100)
            t.pd()
            t.seth(-30)
            a = 0.4
            for i in range(60):
                if 0 <= i < 30 or 60 <= i < 90:
                    a = a + 0.08
                    t.lt(3)  # 向左转3度
                    t.fd(a)  # 向前走a的步长
                else:
                    a = a - 0.08
                    t.lt(3)
                    t.fd(a)
            t.end_fill()
    
            # 耳朵
            t.color((255, 155, 192), "pink")
            t.pu()
            t.seth(90)
            t.fd(-7)
            t.seth(0)
            t.fd(70)
            t.pd()
            t.begin_fill()
            t.seth(100)
            t.circle(-50, 50)
            t.circle(-10, 120)
            t.circle(-50, 54)
            t.end_fill()
    
            t.pu()
            t.seth(90)
            t.fd(-12)
            t.seth(0)
            t.fd(30)
            t.pd()
            t.begin_fill()
            t.seth(100)
            t.circle(-50, 50)
            t.circle(-10, 120)
            t.circle(-50, 56)
            t.end_fill()
    
            # 眼睛
            t.color((255, 155, 192), "white")
            t.pu()
            t.seth(90)
            t.fd(-20)
            t.seth(0)
            t.fd(-95)
            t.pd()
            t.begin_fill()
            t.circle(15)
            t.end_fill()
    
            t.color("black")
            t.pu()
            t.seth(90)
            t.fd(12)
            t.seth(0)
            t.fd(-3)
            t.pd()
            t.begin_fill()
            t.circle(3)
            t.end_fill()
    
            t.color((255, 155, 192), "white")
            t.pu()
            t.seth(90)
            t.fd(-25)
            t.seth(0)
            t.fd(40)
            t.pd()
            t.begin_fill()
            t.circle(15)
            t.end_fill()
    
            t.color("black")
            t.pu()
            t.seth(90)
            t.fd(12)
            t.seth(0)
            t.fd(-3)
            t.pd()
            t.begin_fill()
            t.circle(3)
            t.end_fill()
    
            #
            t.color((255, 155, 192))
            t.pu()
            t.seth(90)
            t.fd(-95)
            t.seth(0)
            t.fd(65)
            t.pd()
            t.begin_fill()
            t.circle(30)
            t.end_fill()
    
            #
            t.color(239, 69, 19)
            t.pu()
            t.seth(90)
            t.fd(15)
            t.seth(0)
            t.fd(-100)
            t.pd()
            t.seth(-80)
            t.circle(30, 40)
            t.circle(40, 80)
    
            # 身体
            t.color("red", (255, 99, 71))
            t.pu()
            t.seth(90)
            t.fd(-20)
            t.seth(0)
            t.fd(-78)
            t.pd()
            t.begin_fill()
            t.seth(-130)
            t.circle(100, 10)
            t.circle(300, 30)
            t.seth(0)
            t.fd(230)
            t.seth(90)
            t.circle(300, 30)
            t.circle(100, 3)
            t.color((255, 155, 192), (255, 100, 100))
            t.seth(-135)
            t.circle(-80, 63)
            t.circle(-150, 24)
            t.end_fill()
    
            #
            t.color((255, 155, 192))
            t.pu()
            t.seth(90)
            t.fd(-40)
            t.seth(0)
            t.fd(-27)
            t.pd()
            t.seth(-160)
            t.circle(300, 15)
            t.pu()
            t.seth(90)
            t.fd(15)
            t.seth(0)
            t.fd(0)
            t.pd()
            t.seth(-10)
            t.circle(-20, 90)
    
            t.pu()
            t.seth(90)
            t.fd(30)
            t.seth(0)
            t.fd(237)
            t.pd()
            t.seth(-20)
            t.circle(-300, 15)
            t.pu()
            t.seth(90)
            t.fd(20)
            t.seth(0)
            t.fd(0)
            t.pd()
            t.seth(-170)
            t.circle(20, 90)
    
            #
            t.pensize(10)
            t.color((240, 128, 128))
            t.pu()
            t.seth(90)
            t.fd(-75)
            t.seth(0)
            t.fd(-180)
            t.pd()
            t.seth(-90)
            t.fd(40)
            t.seth(-180)
            t.color("black")
            t.pensize(15)
            t.fd(20)
    
            t.pensize(10)
            t.color((240, 128, 128))
            t.pu()
            t.seth(90)
            t.fd(40)
            t.seth(0)
            t.fd(90)
            t.pd()
            t.seth(-90)
            t.fd(40)
            t.seth(-180)
            t.color("black")
            t.pensize(15)
            t.fd(20)
    
            # 尾巴
            t.pensize(4)
            t.color((255, 155, 192))
            t.pu()
            t.seth(90)
            t.fd(70)
            t.seth(0)
            t.fd(95)
            t.pd()
            t.seth(0)
            t.circle(70, 20)
            t.circle(10, 330)
            t.circle(70, 30)
            t.up()
            t.goto(180, 90)
            t.pencolor('red')
            t.write(cls.words, font=('微软雅黑', 15, 'normal'))
            time.sleep(10)
    
        @staticmethod   #静态方法 用类名直接调用  不能调用任何类变量/方法、实例变量/方法
        def about_me():
            print('这个猪类可以画佩奇-Pig.peiQi()')
    
    Pig.words = '一个精致的猪猪女孩'   #修改类变量
    Pig.peiQi()
    Pig.about_me()
    View Code
  • 相关阅读:
    word2010怎么把白色方框变成黑色方框?
    Ubuntu 14.04 安装 Sublime Text 3
    安装xmlspy之后,链接及邮箱等都用这个软件打开,怎样取消?
    SRAM、DRAM、SDRAM、DDR、DDR2、DDR3
    ROM和RAM区别
    shell脚本分析一
    重要网址
    vi/vim
    dump_stack使用
    BIOS、BootLoader、uboot对比
  • 原文地址:https://www.cnblogs.com/HathawayLee/p/9955277.html
Copyright © 2020-2023  润新知