美文网首页Pythonpython
Python基础(五)类和对象

Python基础(五)类和对象

作者: 鹊南飞_ | 来源:发表于2019-09-27 00:39 被阅读0次

    1. 类和对象

    1. 定义类

    class 类名:
            执行语句...
            零到多个类变量...
            零到多个方法...
    
    1. 类名:由一个或多个有意义的单词连缀而成的,每个单词首字母大写,其他字母小写,单词与单词之间不要使用任何分隔符
    2. 类变量属于类本身,用于定义该类本身所包含的状态数据
    3. 实例变量属于该类的对象,用于定义对象所包含的状态数据
    4. 方法则用于定义该类的对象的行为或功能实现
    5. init构造方法,del析构方法
    类的定义

    2. 对象的产生和使用

    对象的产生
    对象的使用

    3. 实例方法

    对于在类体中定义的实例方法,Python会自动绑定方法中的第一个参数(通常建议将该参数命名为self),第一个参数总是指向调用该方法的对象。在构造方法中,self参数(第一个参数)代表该构造方法正在初始化的对象。

    class Dog:
        def run(self):
            print('这是run方法')
        def jump(self):
            self.run()
            print('这是jump方法')
    

    2. 方法

    方法是类或对象的行为特征的抽象

    1. 类也能调用实例方法

    # 全局变量的定义
    def foo():
         print('全局变量的foo方法')
    bar = 200
    class Brid:
        # 定义Bird空间的foo函数
        def foo():
            print('Bird空间的foo方法')
        def walk(self):
            print(self,'正在走')
        bar = 200
    # 调用
    foo()
    print(bar)
    
    Brid.foo()
    print(Brid.bar)
    # Brid.walk() 报错
    Brid.walk('abc')
    

    2. 类方法与静态方法

    @classmethod 装饰的是类方法,类方法的第一个参数(建议用cls参数)
    @staticmethod 装饰的是静态方法


    类方法与静态方法

    3. @函数装饰器

    示例

    当程序使用“@函数”(比如函数A)装饰另一个函数(比如函数B),实际上完成以下两步:

    1. 将被装饰的函数(函数B)作为参数传给@符号引用的函数(函数A)
    2. 将函数B替换(装饰)成第1步返回的结果

    可以看出被装饰的函数,不再是原来的函数,而是替换成一个新的东西。

    示例2

    上面定义了一个装饰器函数foo,执行完返回的不是普通值,而是bar函数,这意味着被@foo修饰的函数最终都会被替换成bar函数。上面程序使用@foo装饰my_test,因此程序会执行foo(my_test),并将my_test替换成foo()函数的返回值:bar函数。程序会两次调用my_test()函数,其实是调用bar()函数

    4. 类命名空间

    3. 成员变量

    1. 类变量和实例变量

    类变量 实例变量

    2. 使用property函数定义属性

    propetty(fegt=None,fset=None,fdel=None,doc=None)
    

    4. 隐藏和封装

    python并不能真正的支持封装
    只要将Python类的成员命名为以双下划线开头的,python就会将他们隐藏起来

    5. 类的继承

    1. 单继承

    class SubClass(superClass1, superClass2, ...):
        # 类定义部分
    
    类的继承

    2. 多继承

    虽然在语法上明确支持多继承,但通产推荐,如果不是很有必要,尽量不要使用多继承,避免很多麻烦
    当一个子类有很多个直接父类时,该子类会继承得到所有父类的方法。如果多个父类有同名的方法,排在前面的父类中的方法会”遮蔽“在后面的父类中的同名方法。

    3. 重写父类的方法

    重写父类的方法

    4. 使用未绑定方法调用被重写的方法

    使用未绑定方法调用被重写的方法

    5. 使用super函数调用父类的构造方法

    排在前面的父类的同名方法会遮蔽后面父类的同名方法


    没有使用super函数 使用super函数

    6. Pthon的动态性

    1. 动态属性与slots

    2. 使用type()函数定义类

    3. 使用metaclass

    7. 多态

    8. 枚举类

    相关文章

      网友评论

        本文标题:Python基础(五)类和对象

        本文链接:https://www.haomeiwen.com/subject/grsluctx.html