• python 之路 面向对象


    ---恢复内容开始---

    一切  万物皆对象。

    面向对象其实只是一种编程方式。面向对象式编程可以在很大程度上帮助我们节省时间内存,等问题是我们的代码简单明了。

    那么首先定义的格式为class

    class game:
        n="woshi n"
        name="wocao"
        def __init__(self, name, job, wuqi, money = 450,blood=100):
            # 构造函数
            # 在实例化时做一些类的初始化工作
            self.name = name  # 实例变量(静态属性) 作用域就是实例本身
            self.job = job
            self.wuqi = wuqi
            self.money = money
            self.blood = blood
    
        def buy_gun(self, gun_name):  # 类的方法 (功能)动态属性
            self.wuqi = gun_name
            print("%s - %s - %s   money:%s  blood: %s" % (self.name, self.job, self.wuqi, self.money, self.blood))
    
    liqing = game('liqing','please','xxx')
    liqing.buy_gun('ak47')
    liqing.name='liushuyuan' # 由此看出   先找实例 在找类变量
    liqing.buy_gun('ak47')

    构造函数就是为了在实例化的时候为变量赋值

    那么假如

    当类已经构建完毕  我有想加一个属性呢?
    答案显然是可以的 这就取决于你是想给类变量赋值还是给实例变量赋值了
    并且现在还有一个问题,当类变量和实例变量相同时我们在修改的时候都是r1.name时会发生什么呢
    liqing.name='liushuyuan' # 由此看出   先找实例 在找类变量
    liqing.buy_gun('ak47')
    # 重新赋值
    # 当类已经构建完毕  我有想加一个属性呢?
    liqing.xuemaojiao = " 喵喵喵"
    print(liqing.xuemaojiao)

    如上面代码所示,先找实例 在找类变量是我们的准则

    并且属性的增删改查都可以实现

    
    

    1.2析构函数

    析构函数和构造函数的作用相反

    析构函数:在实例释放和销毁的时候执行通常做一些扫尾工作如关闭一些数据库链接打开的临时文件

        def __del__(self):         #  析构方法 在程序结束的时候被默认执行(自动)
            print("彻底死了")

    我们看一个完整的代码

    class game:
        n="woshi n"
        name="wocao"
        def __init__(self, name, job, wuqi, money = 450,blood=100):
            # 构造函数
            # 在实例化时做一些类的初始化工作
            self.name = name  # 实例变量(静态属性) 作用域就是实例本身
            self.job = job
            self.wuqi = wuqi
            self.money = money
            self.blood = blood
        def __del__(self):         #  析构方法 在程序结束的时候被默认执行(自动)
            print("彻底死了")
        def buy_gun(self, gun_name):  # 类的方法 (功能)动态属性
            self.wuqi = gun_name
            print("%s - %s - %s   money:%s  blood: %s" % (self.name, self.job, self.wuqi, self.money, self.blood))
    
    liqing = game('liqing','please','xxx')
    liqing.buy_gun('ak47')

    那么结构是这样的

    liqing - please - ak47   money:450  blood: 100
    彻底死了

    现在  作用效果显而易见了

    1.3私有属性

    假如你设计了一个游戏,你的血量如果在外面可以任意改的时候,你这个游戏就会被别人的一句代码给你直接写死了这个游戏还玩个毛线啊

    那么此时私有属性就出来了 ,顾名思义私有属性就是只能在内部修改,方法为在变量前面加上两条下划线。

    当我的属性(变量)不想被外面调用时我就可以用到这种方法

    class cs:
        def __init__(self, name, age, wuqi, blood=100):
            self.__name = name
            self.age = age
            self.wuqi = wuqi
            self.__blood = blood
        def shoot(self):
            self.__blood = self.__blood-20
    
    r1 = cs('liqing','6','ak47')
    r1.shoot()

    如代码所示当标记为私有变量的时候 从外部不能访问  只能内部调用

    1.4私有方法

    私有方法也是在函数名前加上两个下划线

    2.1继承

    我们的代码就是要尽量减少重复代码,那么当多个类都有相同的代码时我们又用什么方法来解决呢

    那么就是继承了

    子类可以继承父类的所有东西,并且还可以对父类的方法重新构建。

    class People:
        def __init__(self, name, age, word):
            self.name=name
            self.age=age
            self.word=word
    
        def jiao(self):
            print('我们一起学猫叫')
    class man(People):
        def jiao_(self):
            print("我是男人")
            People.jiao(self)
            print("piao piao piao")
    
    
    r1 = man('liqing', 6, 'china')
    r1.jiao_()

    此时我在man方法种就可以任意的调用父类中的方法了

    那么当我子类的方法名称于父类相同时,优先执行子类的方法

    如代码所示我们如果先对父类的方法重新增加功能的话就需要People.jiao()

    然后在增加就可以了。

    2.2对构造函数进行重构

        def __init__(self, name, age, word, money):
            People.__init__(name, age, word)
            self.money = money
            # 或者
            super(man,self).__init__(name, age, word)

    3.1新式类与经典类

    # class people:  # 经典类
    class people(object):  # 新式类   super(people, self).__init__() 新式类写法

    多继承。。。。。。。。待更新

  • 相关阅读:
    VS Studio中复制窗体产生obj\Debug\SXP227\newform2.resources”在“Resources”参数中指定了多次。“Resources”参数不支持重复项 错误解决方案
    标签 frameset, frame ,noframes,iframe
    Winform GridView的允许自动生成列属性 AutoGenerateColumns
    目前自己的.Net的水平状态评估、方向
    C# 读取Excel中的时间
    asp.net中Button控件的单击回传机制
    javascript实现两个asp.net服务器控件ListBox值的互传
    关键字partial
    解决jQuery插件tipswindown与hintbox冲突
    C#数据结构三:单链表Singly Linked List
  • 原文地址:https://www.cnblogs.com/BookMiki/p/9751989.html
Copyright © 2020-2023  润新知