• 爬虫与Python:(二)Python基础篇——13.类


    Python中的类提供了面向对象变成的所有基本功能:类的继承机制允许多个基类,派生类可以覆盖基类中的任何方法,方法中调用类的同名方法。以下是本文将要学习的内容:

    类的定义

    定义类的语法格式如下:

    1 class ClassName:
    2     <statement-1>
    3     ...
    4     <statement-N>

    类实例化后,可以使用其属性,实际上,创建一个类之后,可以通过类名访问其属性。例如,定义一个学生类 Student。

    1 class Student():
    2    def info(self):
    3        print("测试方法")

    类对象

    类对象支持两种操作:属性引用和实例化。属性引用使用Python中所有的属性引用一样的标准语法:obj.name。类对象创建后,类命名空间中所有的命名都是有效属性。所以,如果类定义为:

     1 class MyClass:
     2    """一个简单的类实例"""
     3    i = 12345
     4    def f(self):
     5        return "hello world"
     6 
     7 # 实例化类
     8 x = MyClass()
     9 # 访问类的属性和方法
    10 print("MyClass类的属性i为:", x.i)
    11 print("MyClass类的方法f输出为:", x.f())

    以上创建了一个新的实例并将该对象赋给局部变量x, x为空的对象。

    运行后控制台会输出:

    MyClass类的属性i为: 12345
    MyClass类的方法f输出为: hello world

    类有一个名为 __init__() 的特殊方法(构造方法),该方法在类实例化时会自动调用,具体如下:

    1 def __init__(self):
    2     self.data = []

    类定义了 __init__() 方法,类的实例化操作会自动调用 __init__() 方法。如下列实例化MyClass对应的__init__方法就会被调用。

    x = MyClass()

    当然, __init__() 方法可以有参数,参数通过 __init__() 传递到实例化操作上。例如:

    1 class Complex:
    2     def __init__(self, realpart , imagpart):
    3         self.r = realpart
    4         self.i = imagpart
    5 x = Complex(3.0 , -4.5)
    6 print(x.r , x.i)      # 输出结果: 3.0 -4.5

    self代表类的实例,而非类,类的方法与普通的函数只有一个特别的区别——它们必须由一个额外的参数名称,按照惯例她的名称是self。

    类方法

    在类的内部,使用def关键字来定义一个方法,与一般的函数定义不同,类的方法必须包含参数self,且为第一个参数,self代表的是累的实例。

     1 # 类定义
     2 class people:
     3     # 定义基本属性
     4     name = ''
     5     age = 0
     6     # 定义私有属性,私有属性在类外部无法直接访问
     7     __weight = 0
     8     # 定义构造方法w
     9     def __init__(self , n , a ,w):
    10         self.name = n
    11         self.age = a
    12         self.__weight = w
    13     def speak(self):
    14         print("%s说:我%d岁"%(self.name , self.age))
    15 
    16 # 实例化类
    17 p = people('runoob' , 10 ,30)
    18 p.speak()

    运行后控制台输出: runoob说:我10岁 

    继承

    Python同样支持类的继承——如果一种语言不支持继承,类就没有什么意义。派生类的定义如下:

    1 class DeriedClassName(BaseClassName1):
    2     <statement-1>
    3     ...
    4     <statement-N>

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

    BaseClassName1(示例中基类名)必须与派生类定义在一个作用域内。除了类外,还可以用表达式,当基类定义在另一个模块中时这一点非常有用。

    class DeriedClassName(modname.BaseClassName):

    示例如下:

     1 # 类定义
     2 class people:
     3     # 定义基本属性
     4     name = ''
     5     age = 0
     6     # 定义私有属性,私有属性在类外部无法直接访问
     7     __weight = 0
     8     # 定义构造方法w
     9     def __init__(self , n , a ,w):
    10         self.name = n
    11         self.age = a
    12         self.__weight = w
    13     def speak(self):
    14         print("%s说:我%d岁"%(self.name , self.age))
    15 
    16 # 单继承示例
    17 class student(people):
    18     grade = ''
    19     def __init__(self , n , a, w ,g):
    20         # 调用基类的构造函数
    21         people.__init__(self, n, a ,w )
    22         self.grade = g
    23     # 覆盖基类的方法
    24     def speak(self):
    25         print("%s说:我%d岁了,我在读%d年级" % (self.name, self.age , self.grade))
    26 
    27 # 实例化类
    28 s = student('runoob',10,60,3)
    29 s.speak()

    运行后控制台输出: runoob说:我10岁了,我在读3年级

    有志者,事竟成,破釜沉舟,百二秦关终属楚; 苦心人,天不负,卧薪尝胆,三千越甲可吞吴。
  • 相关阅读:
    转:Mac下搭建svn服务器和XCode配置svn
    坑爹的高德地图API
    Mac下搭建svn服务器和XCode配置svn
    手风琴效果
    模仿淘宝吸顶条(定时器)
    模仿手机发送短信
    上下移动-欢迎拍砖
    中国的数字图书馆
    响应式布局这件小事
    JS学习笔记
  • 原文地址:https://www.cnblogs.com/luyj00436/p/15325760.html
Copyright © 2020-2023  润新知