一、类
面向对象编程是最有效的软件编写方式之一。
在编写类时,我们定义一大类对象都有通用行为。基于类创建对象时,每个对象都自动具备这种通用行为,然后可根据需要赋予每个对象独特的个性。
根据类来创建对象称为实例化。
二、创建和使用类
实用类几乎可以模拟任何东西。
创建Dog类(方法__int__())
例:根据Dog类创建的每个实例都将存储名字和年龄,我们赋予了每条小狗蹲下(sit())和打滚(roll_over())的能力。
class Dog:
"""一次模拟小狗的简单尝试。"""
def __init__(self,name,age):
"""初始化属性name和age。"""
self.name = name
self.age = age
def sit(self):
"""模拟小狗收到命令时蹲下"""
print(f"{self.name} is now sitting.")
def roll_over(self):
"""模拟小狗收到命令时打滚。"""
print(f"{self.name} rolled over")
代码解析:
1.第一行代码定义了一个名为Dog的类。
2.根据约定,在python中,首字母大写的名称指的是类。
3.类定义中没有圆括号,因为要从空白创建这个类。
4.方法__init__()
**(1)**类中的函数称为方法。
(2)第三行代码处的方法__init__() 是一个特殊方法,每当我们根据Dog类创建新实例时,python都会自动运行它。在这个方法的名称中,开头和末尾各有两个下划线,这是一种约定,是为了避免python默认方法与普通方法发生名称冲突。
(请务必确保__init__()的两边都有两个下划线!!!)
(3)我们定义的方法__init__() 包含三个形参:self、name、age。
(4) 在这个方法的定义中,形参self必不可少,而且必须位于其他形参的前面,self是一个指向实例本身的引用,让实例能够访问类中的属性和方法。
(5)代码中的 self.name和self.age都有前缀self。以self为前缀的变量可供类中的所有方法使用,可以通过类的任何实例来访问。
(6)self.name = name 获取与形参name相关联的值,并将其赋给变量name,然后该变量被关联到当前创建的实例。像这样可通过实例访问的变量称为属性。
三、根据类创建实例
例:创建一个表示特定小狗的实例
class Dog:
--snip-- #意思是将上面我们定义的Dog类复制过来(手动复制)
my_dog = Dog('Willie',6)
print(f"My dog's name is {my_dog.name}")
print(f"My dog is {my_dog.age} years old.")
输出结果:
代码解析:
1.在Dog类中方法__init__()创建一个表示特定小狗的实例,并使用提供的值来设置属性name和age
2.接下来python返回一个表示这条小狗的实例,而我们将这个实例赋给了my_dog.
3.命名约定通常可认为首字母大写的名称指的是类,而小写的名称指的是根据类创建的实例。
1.访问属性
要访问实例的属性,可使用句点表示法。
my_dog.name
在类中引用这个属性时使用的是
self.name
2.调用方法
根据Dog类创建实例后,就能使用句点表示法来调用Dog类中定义的任何方法了。
class Dog:
--snip-- #意思是将上面我们定义的Dog类复制过来(手动复制)
my_dog = Dog('Willie',6)
my_dog.sit()
my_dog.roll_over()
输出结果:
3.创建多个实例
例:根据需要创建任意数量的实例。在创建一个名为your_dog的小狗实例
class Dog:
--snip-- #意思是将上面我们定义的Dog类复制过来(手动复制)
my_dog = Dog('Willie',6)
your_dog = Dog('Lucy',3)
print(f"My dog's name is {my_dog.name}")
print(f"My dog is {my_dog.age} years old.")
my_dog.sit()
print(f"\nYour dog's name is {your_dog.name}")
print(f"Your dog is {your_dog.age} years old.")
your_dog.sit()
输出结果: