Python入坑笔记(六):类

Author Avatar
Zhu Yuexin Dec 11, 2017

类的创建和使用

创建类

举个栗子:

class Dog():
    def __init__(self, name, age):
        """初始化属性name和age"""
        self.name = name
        self.age = age

    def sit(self):
        """模拟小狗蹲下"""
        print(self.name.title() + " is now sitting.")

    def roll(self):
        """模拟小狗打滚"""
        print(self.name.title() + " rolled over!")

#创建实例
my_dog = Dog("Whillie", 6)

print("My dog's name is " + my_dog.name.title())
print("My dog is " + str(my_dog.age) + " years old")
my_dog.roll()

以上创建了一个Dog类(类名首字母大写),类属性有nameage,类方法有sit()roll()

  • 方法__init__()是一个特殊的方法,类似于Java中的构造函数,每当根据Dog类创建新实例时,Python都会自动运行它,做一些初始化操作。
  • 参数self__init__()方法中必不可少且在所有形参之前,它是一个指向实例本身的引用,让实例能够访问类中的属性和方法。self在创建实例时自动传递,不需要手动传递实参。
  • 在类中使用self.name这种方式访问类属性或方法。在类外则用实例名访问或调用,如my_dog.name

在Python2.7中创建类

Python2.7中创建类时需要细微的修改,在类名括号中包含单词object

class ClassName(object)
--snip--

创建类实例

根据上面的Dog类,下面创建一个特定小狗的实例:

my_dog = Dog('Tom', 6)
print("My dog's name is " + my_dog.name.title() + ".")
print("My dog is " + str(my_dog.age) + "years old.")

可以看到,创建实例时,直接使用类名并传入参数即可,不用像Java那样使用new关键字。要访问实例的属性,使用句点表示法,比如访问my_dogname属性的值:

my_dog.name

Dog类中引用该属性时,用的是self.name

title()方法将属性name的值改为首字母大写

在创建好类的实例后,就可以用句点表示法来调用类中定义的方法,比如:

my_dog.rit()

修改属性的值

通过句点表示法可以访问类中的属性值,同样也可以修改属性的值:

my_dog = Dog('Tom', 10)
my_dog.name = 'Jerry'

还可以通过定义类中的方法修改属性的值:

class Dog():
    --snip--
    def change_name(self, new_name):
        self.name = new_name

类的继承

子类的定义和使用

首先定义一个父类:

"""父类"""
class Dog():
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def sit(self):
        print(self.name.title() + " is now sitting.")

    def roll(self):
        print(self.name.title() + " rolled over!")

然后定义一个继承于该父类的子类:

"""子类"""
class Corgi(Dog):
    def __init__(self, name, age, color):
        super().__init__(name, age)
        self.color = color

在创建子类时,父类必须包含在当前文件中,并且位于子类之前。在定义子类时,将父类的名称指定在类括号中。super()方法将父类和子类关联起来。

Python2.7中的继承

class Corgi(Dog):
    def __init__(self, name, age, color):
        super(Corgi, self).__init__(name, age)
        self.color = color

super()函数需要两个实参:子类名和对象self。

尝试创建一个子类实例并调用:

corgi = Corgi('Tom', 10, 'brown')
corgi.sit()

output:

Tom is now sitting.

如果父类方法不适用于子类,可以在子类中对该方法进行重写。

导入类