阅读《Python编程从入门到实践》Day09

第九章(一)

面向对象编程是最有效的软件编写之一。基于类创建对象时,每个对象都自动具备这种通用行为,然后可根据需要赋予每个对象独特的个性。根据类来创建对象被称为实例化。

1、创建和使用类

创建表示小狗的简单类——它表示的不是特定的小狗,而是任何的小狗。

(1)创建Dog类

根据Dog类创建的每个实例都将存储名字和年龄,并赋予了每条小狗蹲下(sit())和打滚(roll_over())的能力:

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_over(self):
        print(self.name.title() + " rolled over!")

根据约定,在Python中,首字母大写的名称指的是类。
方法init():
类中的函数称为方法,前面有关函数的一切都适用于方法,目前唯一重要的差别是调用方法的方式。init()是一个特殊的方法,每当你根据Dog类创建新实例时,Python都会自动运行它。在这个方法的名称中,开头和末尾各有两个下划线,这是一种约定,旨在避免Python默认方法与普通方法发生名称冲突。其中的形参self必不可少,还必须位于其他形参的前面。Python调用这个方法时,会自动传入实参self。每个与类相关联的方法调用都自动传递实参self,它是一个指向实例本身的引用,让实例能够访问类中的属性和方法。每当我们根据Dog类创建实例时,都只需给self后面的形参提供值。在它下面定义的变量都有前缀self。以self为前缀的变量都可供类中的所有方法使用,可以通过类的任何实例来访问这些变量。可通过实例访问的变量成为属性。
在Python 2.7中创建类:
在Python2.7中创建类时,需要在括号内包含单词object。

class ClassName(object):
(2)根据类创建实例
my_dog = Dog('willie', 6)
print("My dog's name is " + my_dog.name.title() + ".")
print("My dog is " + str(my_dog.age) + " years old.")
# 输出:
My dog's name is Willie.
My dog is 6 years old.

利用前面的Dog类创建实例。在这里,命名的约定很有用:我们通常可以认为首字母大写的名称指的是类,而小写的名称指的是根据类创建的实例。
访问属性:
使用句点表示法,这种语法演示了Python如何获悉属性的值。Python先找到实例,在查找与这个实例相关联的属性。
调用方法:
创建实例后,可以使用句点表示法来调用类中定义的任何方法。

my_dog = Dog('willie', 6)
my_dog.sit()
my_dog.roll_over()
# 输出:
Willie is now sitting.
Willie rolled over!

要调用方法,可指定实例的名称和要调用的方法,并用句点分隔它们。
创建多个实例:
可按需求根据类创建任意数量的实例。

my_dog = Dog('willie', 6)
your_dog = Dog('lucy', 3)

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

print("\nMy dog's name is " + your_dog.name.title() + ".")
print("My dog is " + str(your_dog.age) + " years old.")
your_dog.sit()
# 输出:
My dog's name is Willie.
My dog is 6 years old.
Willie is now sitting.

My dog's name is Lucy.
My dog is 3 years old.
Lucy is now sitting.

可按需求根据一个类创建任意数量的实例,条件是将每个实例都存储在不同的变量中,或占用列表或字典的不同位置。

你可能感兴趣的:(阅读《Python编程从入门到实践》Day09)