zoukankan      html  css  js  c++  java
  • Python 4 面向对象

    相关概念:

    静态属性:定义在类中、__init__外的属性

    动态属性:定义在__init__中的属性

    私有属性:以__开头的属性

    类方法:@classmethod,把一个方法变成一个操作类的方法,不依托于对象,可以直接被类调用。比如修改静态属性。有一个固定的参数cls。

    class Goods(object):
        discount = 1
        def __init__(self, name, price):
            self.name = name
            self.price = price * self.discount
    
        @classmethod
        def change_discount(cls, new_discount):
            cls.discount = new_discount
    
    Goods.change_discount(0.8)
    potato = Goods("potato", 100)
    print(potato.price)
    类方法示例

    静态方法:@staticmethod,在完全面向对象的程序中,如果一个函数既和对象没有关系,又和类没有关系,就把这个函数变成一个静态方法,可以通过类名点这个方法执行。没有默认的参数。

    class Login(object):
        def __init__(self, user, pwd):
            self.user = user
            self.pwd = pwd
    
        def login(self):
            pass
    
        @staticmethod
        def get_usr_pwd():
            user = input("请输入用户名")
            pwd = input("请输入密码")
            Login(user, pwd)
    
    Login.get_usr_pwd()
    静态方法示例

    @property:可以让一个方法变成属性。

    面向对象三大特性:封装、继承、多态

    一、封装

    封装就是将内容封装到某个地方,以后需要使用时去这个地方调用。

    应用:Flask中的RequestContext

    二、继承

    子类可以使用父类中中的属性和方法,减少重复。

    应用:restframework视图函数

    重写父类中的方法:

    class Base(object):
        def __init__(self,name):
            self.name = name
        
        def run(self):
            print(self.name + "正在跑")
    
    class Son(Base):
        def run(self):
             #方式一
             Base.run(self)
             #方式二
             super(Son,self).run()

    继承的顺序:

    在新式类中,类继承的顺序是广度优先,在经典类中继承的顺序是深度优先。

    三、多态

    多态指的是一类事物具有多种形态,一个类所实例化出的对象就是这个类的多种形态。

    在java中传递参数需要指定所需数据的数据类型,但是有的时候并不确定我要传递的数据类型,比如一个函数要传递一个男人对象或者是一个女人对象,但不确定具体是哪个,这个时候就可以定义一个人类,让男人类和女人类都继承这个人类,这样我在函数中只要指定所需的数据类型是人类,我就可以传递男人类或者女人类了。这是多态的应用

    在python中是天生支持多态的,因为python所有的类都在源头继承了object对象,所以在python中对数据类型并不敏感,只要一个类中定义了我将要调用的属性或方法,那么我就可以传递这个类当做参数而不用去在意这个类的数据类型。所以python是处处有多态的。

    举例:创建两个类,猫类和狗类,都定义一个run方法,一个打印猫在跑,一个打印狗在跑。定义一个函数,传入一个对象,执行这个对象的run方法。猫类和狗类都可以传入,他们都有run方法,但是得到了不同的结果。

  • 相关阅读:
    数据库常用操作命令以及explain执行计划
    spring中父子容器
    为什么SpringCloud引导类不加@EnableDiscoveryClient也可以注册到eureka中
    使用dubbo的注解,AOP配置xml的方式无法开启事务
    Excel导出打印失败报错 (eg HSSF instead of XSSF)
    0317 ajax
    0316 事务
    0316 DBUtils
    0315 el技术和jstl技术 javaEE开发模式
    0313 jsp
  • 原文地址:https://www.cnblogs.com/yinwenjie/p/10847459.html
Copyright © 2011-2022 走看看