10,类对象

丶灬走出姿态 提交于 2020-03-26 17:30:21

3 月,跳不动了?>>>

类对象

定义 类(Class)是设计蓝图(或模型),用来创建不同类型的对象 Python内置有数字、字符串、列表、字典等对象,这些内置对象有已经规定好的属性和方法 若需要创建新的对象类型,则需要使用类 类是一种数据结构,可以用来定义对象,将数据值和行为特征融合在一起 类指定了对象将包含哪些数据和函数,数据一般是变量即对应值,函数一般我们称之为方法 功能 对事务进行高度抽象 类是对事务的抽象 提高代码重用率 通过子类和超类,实现类的(多重)继承 提高程序层次性 类支持继承

语法 class ClassName : 定义类的名称 class ClassName(object) : ‘class documentation string' 类文档字符串 class_suite 类体(内容) 数据属性 方法属性 举例

    >>> class Person:
        ...     'The Person Class'
        ...     def __init__ (self, name, gender, age):
            构造函数,用于给实例/对象初始化参数
            类中第一个函数必须是self,代表实例/对象本身
        ...         self.name = name
        ...         self.gender = gender
        ...         self.age = age
        ...     def print_gender(self):
        ...         print '%s: %s' % (self.name, self.gender)
        ...     def print_age(self):
        ...         print '%s: %s' % (self.name, self.age)

类的实例

定义 类(Class)是现实世界的抽象的实体以编程形式出现,实例(Instance)则是这些对象的具体化 通过实例化,类的方法/函数才可以调用,这是类的绑定特征 语法

    Inst_a = Class( )    创建实例
举例
    >>> class Person:
    ...     'The Person Class'
    ...     def __init__ (self, name, gender, age):
    ...         self.name = name
    ...         self.gender = gender
    ...         self.age = age
    ...     def print_gender(self):
    ...         print '%s: %s' % (self.name, self.gender)
    ...     def print_age(self):
    ...         print '%s: %s' % (self.name, self.age)
    >>> DaXiong = Person('DaXiong', 'male', 10)
        创建实例DaXiong,并传入三个参数给构造函数
    >>> JingXiang = Person('JingXiang', 'Female', 9)
        创建实例DaXiong,并传入三个参数给构造函数
    >>> DaXiong.name
    'DaXiong'
    >>> DaXiong.gender
    'male'
    >>> DaXiong.age
    10
    >>> JingXiang.print_age()
    JingXiang: 9
    >>> JingXiang.print_gender()
    JingXiang: Female

类的属性

属性概述 类的属性由数据和方法两个部分组成,可以通过点号方式来访问 数据属性存储数据和变量值,方法属性存储操作数据的函数

    举例
            >>> class Person():
            ...     version = 1.0
                数据属性
            ...     def printVer(self):
                方法属性
            ...         print self.version
                方法调用数据
            ...         
            >>> p = Person()
            >>> p.version
            1.0
            >>> p.printVer()
            1.0

调用语法

    Inst_a. value1
        调用类的数据属性(变量值)
    Inst_a. method1
        调用类的方法属性(函数)

属性操作

1)属性访问

2)属性修改

3)增加属性

4)查看属性查看属性

dir( )
        >>> dir(DaXiong)
        ['__doc__', '__init__', '__module__', 'age', 'gender', 'name', 'print_age', 'print_gender', 'score', 'version']
    __dict__
        >>> DaXiong.__dict__
        {'gender': 'male', 'age': 11, 'version': 2.0, 'name': 'Daxiong', 'score': 59}查看属性

5)特殊类属性 说明 这里的特殊类属性以value方式命名,前后都有2个下划线 特殊类属性是Python内置属性,所有创建的类默认都有

C.__doc__ 类C的文档字符串 
        >>> Person.__doc__
        'The Person Class'
    C.__dict__ 类C的属性 
        >>> Person.__dict__
        {'__module__': '__builtin__', 'print_age': <function print_age at 0x106132b18>, 'print_gender': <function print_gender at 0x1061329b0>, 'version': 1.0, '__doc__': 'The Person Class', '__init__': <function __init__ at 0x1061328c0>}
    C.__name__: 类名
    C.__module__ 类C定义所在的模块
        >>> Person.__module__
        '__builtin__'
    C.__bases__ : 类的所有父类构成元素

类的继承

定义 当编写一个类(Class)时,可以从之前的类进行继承,这样可以获取之前的类的所有属性 新的类称为子类(Subclass),而被继承的类被称为基类/父类/超类(Superclass) 有些文档将子类称为派生类(Derived class),超类称为基类(Base class) 语法 >>> > class Parent(object): >>> …… > class Child(Parent): > 子类在父类上创建 >

继承判断函数

    isinstance( )
        >>> isinstance(DaXiong, Male)
        True
        >>> isinstance(DaXiong, Female)
        False
        >>> isinstance(JingXiang, Female)
        True
    issubclass( )
        >>> issubclass(Male, Person)
        True
        >>> issubclass(Female, Person)
        True

创建子类 >>> class Person: 'The Person Class' def init(self, name, gender, age): self.name = name self.gender = gender self.age = age def print_gender(self): print '%s: %s' % (self.name, self.gender) def print_age(self): print '%s: %s' % (self.name, self.age)

class Male(Person):
    'The Male Class'
    pass

class Female(Person):
    'The Female Class'
    pass

>>> DaXiong = Male('Daxiong','male',10)
JingXiang = Female('JingXiang', 'female', 9)
>>> DaXiong.print_gender()
Daxiong: male
>>> JingXiang.print_age()
JingXiang: 9

方法定制

说明 类中的继承方法搜索规则:实例 -> 子类 -> 父类 子类除了继承父类的属性,还可以自己添加、定制、拓展更多功能 若子类的属性与父类属性名字相同,则以子类属性为主,即子类将父类的方法重写或拓展

多重继承

定义 多重继承用于实现子类对多个父类的继承 通过多重继承,可以混合不同类的功能,实现更加复杂的需求 语法 class A( ): class B( ): class C(A, B ):

 

 

类的多态

多态 定义 多态是面向对象语言的一个基本特性,多态意味着变量并不知道引用的对象是什么,根据引用对象的不同表现不同的行为方式 举例 >>> class Person: 'The Person Class' def init(self, name, gender, age): self.name = name self.gender = gender self.age = age def print_gender(self): print '%s: %s' % (self.name, self.gender) def print_age(self): print '%s: %s' % (self.name, self.age)

    class Male(Person):
        'The Male Class'
        def print_gender(self):
            print 'He is %s' % self.gender
    
    class Female(Person):
        'The Female Class'
        def print_gender(self):
            print 'She is %s' % self.gender
    >>> DaXiong = Male('Daxiong', 'male', 10)
    >>> JingXiang = Female('JingXiang', 'female', 9)
    >>> from random import choice
    >>> obj = choice([DaXiong,JingXiang])
    >>> print obj.print_gender()
    He is male
    >>> obj = choice([DaXiong,JingXiang])
    >>> print obj.print_gender()
    She is female

私有/保护/公有/变量

定义 默认情况下,类内部所定义的变量通过点号方法可以访问并修改,这种变量称为公有变量 公有变量可被用户修改,导致对象内部状态不一致,此时便需要私有变量(Private) 私有变量即在原有变量的前面加上两个下划线,例如_ _ value

装饰器(@property)

定义 私有变量章节中,我们通过获取和设置函数,实现更安全的访问和设置 但是,在进行访问和设置时,相对显得比较麻烦? 有没有更好的方式?实现以下的需求=> 既能检查参数,又能像属性一样方便地访问和修改类的变量 可以让调用者写出简短的代码,同时保证对参数进行必要的检查 这就需要 @property 装饰器来实现了 Python内置

举例 变量访问和修改变得更简单,变量修改需要依据特定规则 >>>

class Person(object):

def init(self, name, gender, age):

self.name = name self.

gender = gender self.__age = age

@property
    获取函数的主要功能是获取变量值
    在下面score函数前,加入@property装饰器,表示这是一个获取函数(.getter)
    def age(self):
        return self.__age

    @age.setter
    @property + @.setter 实现函数可读写
    设置函数的主要功能是实现变量有条件地赋值
    @property 实现函数只读
    在获取函数score的基础上,加入setter设置函数
    def age(self, value):
        if value < 0 or value > 100:
            raise ValueError('Invalid age!')
        self.__age = value
>>> DaXiong = Person('DaXiong', 'Male', 10)
>>> DaXiong.age
10
>>> DaXiong.age = 200
Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "<input>", line 15, in age
ValueError: Invalid age!
>>> DaXiong.age = 20
>>> DaXiong.age
20

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!