精华内容
下载资源
问答
  • Python__定义和使用类

    千次阅读 多人点赞 2019-05-11 21:53:50
    由于 Python 对面向对象有着良好的支持,因此在 Python定义和使用类并不复杂。类的定义和使用跟函数的定义和使用有很多相似之处。 一、类的定义 在 Python 中,类的定义与函数的定义类似,所不同的是,类的...

     

    由于 Python 对面向对象有着良好的支持,因此在 Python 中定义和使用类并不复杂。类的定义和使用跟函数的定义和使用有很多相似之处。

    一、类的定义

    在 Python 中,类的定义与函数的定义类似,所不同的是,类的定义是使用关键字 "class"。与函数定义相同的是,在定义类时也要使用缩进的形式,以表示缩进的语句属于该类。类的定义形式如下。

    class <类名>:
        <语句1>
        <语句2>
        ...
        <语句3>

    与函数定义相同,在使用类之前必须先定义类。类的定义一般放在脚本的头部。在 Python 中也可以在 if 语句的分支或者函数定义中定义类。下面的代码定义了一个 human 类,并定义了相关的属性。

    class human:    # 定义 human 类
        age = 0     # 定义 age 属性
        sex = ''    # 定义 sex 属性
        height = 0  # 定义 height 属性
        weight = 0  # 定义 weight 属性
        name = ''   # 定义 name 属性

    类还可以通过继承的形式来进行定义。通过类继承来定义类的基本形式如下。

    class <类名>(父类名):
        <语句1>
        <语句2>
        ...
        <语句3>

    其中圆括号中的父类名就是要继承的类。以下所示的代码是通过继承 human 类来生成一个新类。

    class student(human):    # 通过继承 human 类创建 student 类
        school = ''          # 定义 weight 属性
        number = 0           # 定义 weight 属性
        grade = 0            # 定义 weight 属性

    上述通过 human 继承而来的 student 类,自动继承了 human 中的属性。同时在上面的代码中又为 student 类定义了其他的属性。

    类定义后就产生了一个名字空间,与函数类似。在类内部使用的属性,相当于函数中的变量名,还可以在类的外部继续使用。类的内部与函数的内部一样,相当于一个局部作用域。不同类的内部也可以使用相同的属性名。

    二、类的使用

    类在定义后必须先实例化才能使用。类的实例化与函数调用类似,只要使用类名加圆括号的形式就可以实例化一个类。

    类实例化后会生成一个对象。一个类可以实例化成多个对象,对象与对象之间并不会相互影响。类实例化后就可以使用其属性和方法等。下面的代码首先定义了一个 book 类,然后将其实例化。

    class book:  # 定义 book 类
        author = ''  # 定义 author 属性
        name = ''  # 定义 name 属性
        pages = 0  # 定义 pages 属性
        price = 0  # 定义 price 属性
        press = ''  # 定义 press 属性
    
    
    a = book()  # book 类实例化
    print(a)  # 查看对象 a
    print(a.author)  # 访问 author 属性
    print(a.pages)  # 访问 pages 属性
    print(a.price)  # 访问 price 属性
    
    a.author = 'Tutu'  # 设置 author 属性
    a.pages = 300  # 设置 pages 属性
    a.price = 25  # 设置 price 属性
    print(a.author)  # 重新访问 author 属性
    print(a.pages)  # 重新访问 pages 属性
    print(a.price)  # 重新访问 price 属性
    
    b = book()  # 将 book 类实例化生成 b 对象
    print(b.author)  # 访问 b 对象的 author 属性
    print(b.price)  # 访问 b 对象的 price 属性
    b.author = 'Butter'  # 设置 b 对象的 author 属性
    b.price = 15  # 设置 b 对象的 price 属性
    
    print(b.price)  # 访问 b 对象的 price 属性
    print(a.price)  # 访问 a 对象的 price 属性,没有发生改变
    print(b.author)  # 访问 b 对象的 author 属性
    print(a.author)  # 访问 a 对象的 author 属性,没有发生改变
    print(b.pages)  # 访问 b 对象的 pages 属性
    print(a.pages)  # 访问 a 对象的 pages 属性
    

    上面的脚本输出结果如下:

    上述例子只定义了类的属性,并在类实例化后重新设置其属性。从代码中可以看出,类的实例化相当于调用一个函数,这个函数就是类。函数返回一个类的实例对象,返回后的对象就具有了类所定义的属性。上述例子生成了两个 book 实例对象,设置其中一个对象的属性,并不会影响到另一个对象的属性,也就是说,这两个对象是相互独立的。

    在 Python 中需要注意的是,虽然类首先需要实例化,然后才能使用其属性。但实际上当创建一个类以后就可以通过该类名访问其属性。如果直接使用类名修改其属性,那么将影响已经通过该类实例化的其他对象。演示代码如下。

    class A:            # 定义类 A
        name = 'A'      # 定义属性 name 将其赋值为 'A'
        num = 2         # 定义 num 属性将其赋值为 2
    
    
    print(A.name)       # 直接使用类名访问类的属性
    print(A.num)        # 直接使用类名访问类的属性
    
    a = A()             # 生成 a 对象
    print(A.name)       # 查看 a 的 name 属性
    
    b = A()             # 生成 b 对象
    print(b.name)       # 查看 b 的 name 属性
    
    A.name = 'B'        # 使用类名修改 name 属性
    print(a.name)       # a 对象的 name 属性被修改
    print(b.name)       # b 对象的 name 属性也被修改
    

    每一次的 print 输出如下:

    展开全文
  • 二、Python创建使用class语句来创建一个新,class之后为的名称并以冒号结尾,的组成包括成员变量成员函数。三、Python构造函数析构函数:1.__init__()方法是一种特殊的方法,被称为的构造函数或初始...

    类的定义:

    类是用来描述具有相同的属性和方法的对象的集合。它定义了该集合中的每个对象所共有的属性和方法。对象时类的实例。

    二、Python创建类:

    使用class语句来创建一个新类,class之后为类的名称并以冒号结尾,类的组成包括成员变量和成员函数。

    三、Python构造函数和析构函数:

    1.__init__()方法是一种特殊的方法,被称为类的构造函数或初始化方法,当创建了这个类的实例时就会调用该方法。

    2.__del__(),被称为类的析构函数,__del__()在对象消逝的时候被调用,当对象不再被使用时,__del__()方法运行

    四、Python创建实例对象

    要创建一个类的实例,可以使用类的名称,并通过__init__方法接受参数

    可以使用点(.)来访问对象的属性

    类的文档字符串可以通过ClassName.__doc__查看

    1105537-20170807161415846-590777222.png

    count是类属性,所以可以直接用类名.类属性来调用

    类方法也可以使用类名.类方法来调用,eg:User().类方法名称

    1105537-20170807164132612-754379315.png

    五、Python内置类属性

    __doc__:类的文档字符创

    __name__:类名

    __module__:类定义所在的模块(类的全名是'__main__.className',如果累位于一个导入模块mymod中,那么className.__module__等于mymod)

    __bases__:类的所有父类构成元素(包含了一个由所有父类组成的元组)

    __dict__:类的属性(包含一个字典,由类的数据属性组成)

    六、Python对象销毁(垃圾回收)

    1、同Java语言一样,Python使用了引用计数这一简单计数来追踪内存中的对象。

    2、垃圾回收机制不仅针对引用计数未0的对象,同样也可以处理循环引用的情况。

    上述实例中入执行:del u1,则u1对象被销毁,打印:User destroyed

    七、Python类的继承

    面向对象的变成带来的主要好处之一就是代码的重用,实现这种重用的方法之一就是通过继承继承机制。

    1、声明类的时候括号中写要继承的父类。

    2、类的继承衍生出类子类,子类可以继承或重写父类的方法,子类可以自定义新的方法或者成员变量,比如学生类可以继承用户类。

    在继承中基类的构造方法不会被自动的调用,它需要再其派生类的构造中专门进行调用,所以要重写构造方法

    在调用基类的方法时需要加上基类的类名前缀,且需要带上self参数变量

    它的子类也可以定义新的成员变量

    重写基类中的方法,同上

    1105537-20170807170957659-1265480815.png

    注意:

    Python总是首先查找本类(对应的子类)中的方法,如果不在派生类中找到对应的方法,它才开始到基类中逐个查找。

    (多重继承、嵌套继承)

    八、Python类私有属性与方法

    类的私有属性

    __private_attrs:两个下划线开头,声明该属性为私有,不能在类地外部被使用或直接访问。在类内部的方法中使用时self.__private_attrs。

    类的私有方法

    __private_method:两个下划线开头,声明该方法为私有方法,不能在类地外部调用。在类的内部调用self.__private_methods

    python不允许实例访问私有化的属性:

    1105537-20170808095353893-548518194.png

    可以通过object.classname的方式来访问实例的私有属性

    print(n._Mycounter__screctCount)

    九、Python实例方法、类方法、静态方法

    实例方法,类方法,静态方法都是通过实例或者类调用,只不过实例方法通过类调用时需要传递实例的引用(python3可以传递任意对象,其他版本会报错)

    1105537-20170808103130377-422905419.png

    实例方法针对的是实例,第一个参数是self,普通对象方法至少需要一个self参数,代表类对象实例;类方法针对的是类,@classmethod它表示接下来是一个类方法,类方法的第一个参数cls,它们都可以继承和重新定义;静态方法用于作为程序中的共享资源,直接通过类去调用,不用实例化对象,不需要self参数,可以认为是全局函数,@staticmethod它表示接下来的是一个静态方法

    1105537-20170808103854205-1541748189.png

    展开全文
  • Python类定义和使用

    万次阅读 多人点赞 2019-03-06 10:35:18
    为了代码的编写方便简洁,引入了定义; 一般,使用 class 语句来创建一个新,class之后为的名称(通常首字母大写)并以冒号结尾,例如: class Ticket(): def __init__(self,checi,fstation,tstation,fdate,...

    为了代码的编写方便简洁,引入了类的定义;
    一般,使用 class 语句来创建一个新类,class之后为类的名称(通常首字母大写)并以冒号结尾,例如:

    class Ticket():
        def __init__(self,checi,fstation,tstation,fdate,ftime,ttime):
            self.checi=checi
            self.fstation=fstation
            self.tstation=tstation
            self.fdate=fdate
            self.ftime=ftime
            self.ttime=ttime
        def printinfo(self):
            print("车次:",self.checi)
            print("出发站:", self.fstation)
            print("到达站:", self.tstation)
            print("出发时间:", self.fdate)
    

    #类中可以定义所使用的方法,类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self;
    #init()方法是一种特殊的方法,被称为类的初始化方法,当创建这个类的实例时就会调用该方法;
    #self 代表类的实例,self 在定义类的方法时是必须有的,虽然在调用时不必传入相应的参数;
    接下来是类的对象的创建:

    #创建a1对象
    a1=Ticket("G11","xian","beijing",'2019-01-20','13:00','18:00')
    #创建a2对象
    a2=Ticket("T11","xian","beijing",'2019-01-21','13:00','19:00')
    ``
    

    最后是对象属性的访问:

    a1.printinfo()
    a2.printinfo()
    

    输出结果如下:
    在这里插入图片描述
    现在,用类的方式爬虫12306的车站信息:

    import requests
    class Station():
        #__init__()方法是一种特殊的方法,被称为类的初始化方法,当创建这个类的实例时就会调用该方法
        # self 代表类的实例,self 在定义类的方法时是必须有的,虽然在调用时不必传入相应的参数
        def __init__(self,code,cn,qp,jp):
            self.code=code
            self.cn=cn
            self.qp=qp
            self.jp=jp
        #类的方法与普通的函数只有一个特别的区别——它们必须有一个额外的第一个参数名称, 按照惯例它的名称是 self。
        def printinfo(self):
            print(self.code,self.cn,self.jp,self.qp)
        #self代表类的实例,表示当前对象的地址  self.__class__ 则指向类
        def test(self):
            print(self)
            print(self.__class__)
    url="https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.9077"
    #url='https://kyfw.lesson10_1.cn/otn/resources/js/framework/station_name.js?station_version=1.9090'
    html_text=requests.get(url).text
    infos=html_text[:-2].split("@")[1:]
    stations=[]
    
    for info in infos:
        station_list=info.split("|")
        #直接将类的对象添加到列表中,通过__init__()方法接受参数
        stations.append(Station(station_list[2],station_list[1],station_list[3],station_list[4]))
    #遍历列表,每个元素为类的一个对象
    for i in stations[:10]:
        i.printinfo()
        i.test()
    

    结果如下:
    在这里插入图片描述
    嗯嗯~~就这样啦!

    展开全文
  • 一、类定义:class :实例化后,可以使用其属性,实际上,创建一个之后,可以通过类名访问其属性如果直接使用类名修改其属性,那么将直接影响到已经实例化的对象的私有属性:__private_attrs 两个下划线开头,...

    一、类定义:

    class :

    类实例化后,可以使用其属性,实际上,创建一个类之后,可以通过类名访问其属性

    如果直接使用类名修改其属性,那么将直接影响到已经实例化的对象

    类的私有属性:

    __private_attrs 两个下划线开头,声明该属性为私有,不能在类地外部被使用或直接访问

    在类内部的方法中使用时 self.__private_attrs

    类的方法

    在类地内部,使用def关键字可以为类定义一个方法,与一般函数定义不同,类方法必须包含参数self,且为第一个参数

    私有的类方法

    __private_method 两个下划线开头,声明该方法为私有方法,不能在类地外部调用

    在类的内部调用slef.__private_methods

    类的专有方法:

    __init__ 构造函数,在生成对象时调用

    __del__ 析构函数,释放对象时使用

    __repr__ 打印,转换

    __setitem__按照索引赋值

    __getitem__按照索引获取值

    __len__获得长度

    __cmp__比较运算

    __call__函数调用

    __add__加运算

    __sub__减运算

    __mul__乘运算

    __div__除运算

    __mod__求余运算

    __pow__称方

    示例:

    #类定义

    class people:

    #定义基本属性

    name = ''

    age = 0

    #定义私有属性,私有属性在类外部无法直接进行访问

    __weight = 0

    #定义构造方法

    def __init__(self,n,a,w):

    self.name = n

    self.age = a

    self.__weight = w

    def speak(self):

    print("%s is speaking: I am %d years old" %(self.name,self.age))

    p = people('tom',10,30)

    p.speak()

    二、继承类定义:

    1.单继承

    class (父类名)

    eg.

    class childbook(book)

    age = 10

    2.类的多重继承

    class 类名(父类1,父类2,....,父类n)

    需要注意圆括号中父类的顺序,若是父类中有相同的方法名,而在子类使用时未指定,python从左至右搜索,即方法在子类中未找到时,从左到右查找父类中是否包含方法?

    #另一个类,多重继承之前的准备

    class speaker():

    topic = ''

    name = ''

    def __init__(self,n,t):

    self.name = n

    self.topic = t

    def speak(self):

    print("I am %s,I am a speaker!My topic is %s"%(self.name,self.topic))

    #多重继承

    class sample(speaker,student):

    a =''

    def __init__(self,n,a,w,g,t):

    student.__init__(self,n,a,w,g)

    speaker.__init__(self,n,t)

    test = sample("Tim",25,80,4,"Python")

    test.speak()#方法名同,默认调用的是在括号中排前地父类的方法

    类方法的覆写——子类覆盖掉父类的方法

    def 方法名与父类一致

    若是在方法中要使用到父类方法 父类名.方法名

    若是将类放到了模块中

    使用时

    import A

    l = A.类()

    以上三段程序的执行结果:

    展开全文
  • 提起Java的抽象大家都比较熟悉,Python中我们可以使用abc模块来构建抽象,这里就为大家讲解在Python定义和使用抽象的方法
  • 代码实验展示:# 继承关系 object ->... SchoolBoy# python2的语法:# class Person(object):# python3的语法:# class Person():class Person(): # class Person(object):'''定义基类Person'''def __init__(s...
  • 针对这种特殊的Python 3.4 中新增加了 Enum 枚举。也就是说,对于这些实例化对象个数固定的,可以用枚举定义。例如,下面程序演示了如何定义一个枚举:如果想将一个类定义为枚举,只需要令其继承自 ...
  • python的声明使用关键词class,可以提供一个可选的父类或者说基类,如果没有合适的基类,那就用object作为基类。定义格式:class 类名(object):"的说明文档"属性初始方法__init__其他方法其他面向对象语言不...
  • python 2 中一、类定义实例化后,可以使用其属性,实际上,创建一个之后,可以通过类名访问其属性如果直接使用类名修改其属性,那么将直接影响到已经实例化的对象的私有属性:__private_attrs 两个下划线...
  • 针对这种特殊的Python 3.4 中新增加了 Enum 枚举。也就是说,对于这些实例化对象个数固定的,可以用枚举定义。例如,下面程序演示了如何定义一个枚举:如果想将一个类定义为枚举,只需要令其继承自 ...
  • 官方定义类提供了一种组合数据功能的方法。创建一个新意味着创建一个新的对象类型,从而允许创建一个该类型的新实例。每个的实例可以拥有保存自己状态的属性。一个的实例也可以有改变自己状态的(定义中...
  • 标签:Python编程中的概念可以比作是某种类型集合的描述,如“人类”可以被看作一个,然后用人类这个类定义出每个具体的人——你、我、他等作为其对象。还拥有属性功能,属性即本身的一些特性,如人类有...
  • 定义类,语法格式如下:class ClassName:...python使用class关键字来定义类的命名规则是每个单词的首字母都要大写。对象对象支持两种操作:属性引用实例化。属性引用使用和 Python 中所有的属性引用一样...
  • python定义和使用时钟

    千次阅读 2018-06-10 23:28:09
    定义和使用时钟 import time import os class Clock(object): # Python中的函数是没有重载的概念的 # 因为Python中函数的参数没有类型而且支持缺省参数和可变参数 # 用关键字参数让构造器可以传入任意多个...
  • 一、类定义:class :实例化后,可以使用其属性,实际上,创建一个之后,可以通过类名访问其属性如果直接使用类名修改其属性,那么将直接影响到已经实例化的对象的私有属性:__private_attrs 两个下划线开头,...
  • 类的定义和使用类是某类事物的统称,对象是实物。例如动物是一个类,狗或者猫则是对象。# 定义一个类 类的继承#继承
  • 原标题:python枚举类定义和使用 一些具有特殊含义的,其实例化对象的个数往往是固定的,比如用一个表示月份,则该的实例对象最多有 12 个;再比如用一个表示季节,则该的实例化对象最多有 4 个。针对这种...
  • 针对这种特殊的Python 3.4 中新增加了 Enum 枚举。也就是说,对于这些实例化对象个数固定的,可以用枚举定义。 例如,下面程序演示了如何定义一个枚举: from enum import Enum class Color(Enum): #...
  • 一、类定义:class :实例化后,可以使用其属性,实际上,创建一个之后,可以通过类名访问其属性如果直接使用类名修改其属性,那么将直接影响到已经实例化的对象的私有属性:__private_attrs 两个下划线开头,...
  • Python编程中的概念可以比作是某种类型集合的描述,如“人类”可以被看作一个,然后用人类这个类定义出每个具体的人——你、我、他等作为其对象。还拥有属性功能,属性即本身的一些特性,如人类有名字、...
  • 一、类定义: ...在地内部,使用def关键字可以为类定义一个方法,与一般函数定义不同,方法必须包含参数self,且为第一个参数     私有的方法 __private_method 两个下划线开头,声明该方法为私有
  • 像java一样python也可以定义一个抽象。在讲抽象之前,先说下抽象方法的实现。抽象方法是基类中定义的方法,但却没有任何实现。在java中,可以把方法申明成一个接口。而在python中实现一个抽象方法的简单的方法是...
  • 最基本的功能就是定义了一个新的类型。可以使用下面的语法来定义一个空...类定义完之后便可以使用来创建实例,方法如下:实例对象名 = 类名()下面定义一个 Student,并且使用创建一个实例对象 student_...
  • Python 定义类和属性

    2020-07-25 20:13:06
    类定义动物是自然界一个庞大的群体,下面演示使用OOP建模动物使用Python语言创建动物的基本语法如下,使用class关键字定义一个动物:classAnimal(): ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,418
精华内容 2,967
关键字:

python定义和使用类

python 订阅