python-类-从入门到精通(一)

0.什么是类

类(Class)是面向对象程序设计(OOP,Object-Oriented Programming)实现信息封装的基础。类是一种用户定义类型,也称类类型。每个类包含数据说明和一组操作数据或传递消息的函数。类的实例称为对象。

面向对象编程是最有效的软件编写方法之一。在面向对象编程中,我们用类定义一类对象的通用行为,而用类创建的对象则都具有这种通用行为,然后可以根据需要赋予每个对象独立的特性。

在类中,我们把根据类创建对象这个过程称为实例化

通俗地理解:每个人都有类似的特征,比如都有一个头、两只手和两条腿,我们都称为“人”,那么“人”就可以称作一个类,是一个虚指的概念。但我们知道我们虽然特征都是一样的,但每个人都是不同的,比如有不同的身高,体重,肤色等,这些特征是每个人特有的,不能一概而论。不同的人,都属于“人”这个类,但不同的特性表明了这不是同一个个体,所以每个人都是一个实例,是实实在在的存在。

1.创建类

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')

在类中,我们把函数称为方法,把变量称为属性。

Dog类中,第一个特殊的方法是__init__(),这个方法在创建新的实例时,Python都会自动运行它。

注意,init前后都有两道下划线,这是一种约定,只在避免Python默认方法与不同方法名称冲突。

在类的方法中,都有一个self参数,新手只需要记住,这个参数必不可少,还必须位于其他参数前面。在传参的时候,忽略self参数即可,python会帮助我们完成self参数的处理。

self实际上是一个指向实例本身的引用。在Python调用__init__()方法来创建实例的时候,将自动传入实参self。每个与类相关联的方法在调用时,都会自动传递实参self,让实例能够访问类的属性和方法。比如,本例中的类在实例化的时候,会自动调用_init__方法,通过实参向Dog类传递了name和age。由于self的自动传递功能,使得我们在创建Dog实例的时候,只需要提供两个形参(name,age),那么类中的所有方法都可以访问这两个参数。

2.实例化

前面一节,我们定义了一个Dog类,下面我们创建一个Dog的实例,展示类的使用方法。

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

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

print("\nYour dog's name is " + your_dog.name.title() + ".")
print("Your dog's is " + str(your_dog.age) + "years old.")
your_dog.sit()

我们根据类的定义,创建了两个实例:

一个是my_dog:并传入参数,name='willie' , age=6

一个是your_dog:并传入参数,name='lucy' , age=3

通过调用类中定义的方法:sit(),不同的类的实例,会有不同的sit()输出。

这正是类的核心思想,属于同一个类的不同实例,拥有类似的形式,但却有着不同的内容。

3.添加带默认值的属性

一个类中,可能会用到很多属性,但这些属性不一定都需要通过形参传入。

class Room():
    def __init__(self,seats):
        self.seats = seats
        self.customer = 0

    def enter(self):
        if self.customer <= self.seats:
            print("Enter,please!")
            self.customer += 1
        else:
            print("Sorry,no seat available!")

比如,这里我们定义了一个房间的类,实例化的时候,我们传入房间的座位数。但是,当有顾客进入的时候,我们需要房间内是否还有空座位。因此,在__init__方法中,我们定义了一个customer=0 的计数器,用于统计房间内人数。这个计数器初值通常来说都是0,所以我们并不需要把它作为参数传入,而是直接赋初值0即可。

当我们在类中需要使用一些变量的时候,也可以通过这样的方式创建。创建后的属性,类中的所有方法都可以访问到。

4.修改属性的值

修改属性的值有两种方式:

  1. 直接实例名.属性名的方式修改,比如my_dog.age = 7
  2. 利用类中的方法修改,比如在类中添加update的方法,在方法中修改属性值。
my_dog = Dog('willie',6)
print("My dog's is " + str(my_dog.age) + "years old.")
print("One year later")
my_dog.age = 7
print("My dog's is " + str(my_dog.age) + "years old.")

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')

    def grow_up(self):
        self.age = self.age + 1

my_dog = Dog('willie',6)
print("My dog's is " + str(my_dog.age) + "years old.")
print("One year later")
my_dog.grow_up()
print("My dog's is " + str(my_dog.age) + "years old.")

猜你喜欢

转载自blog.csdn.net/qq_17753903/article/details/82972822