面向对象
类,用来描述一类事物的相同的特征或者属性。比如说,狗,狗属于一种统称,狗还分有不同的种类,比如,牧羊犬,蝴蝶犬,京巴等等,他们都有相同的特征,一个头,两个耳朵,四条腿,会跑,会吃东西,会汪汪叫。。。再比如汽车,四个轮子,都拥有车壳,都会跑,都有一定的承重。。。这些都是具备一些共同特征的事物。
类的定义方式:
class ClassName: '类的帮助信息' # 类文档字符串 class_suite #类体,由类成员,方法,数据属性组成
下面是一个简单类的定义,其中函数内的self代指类的实例
class Cat:
'Cat类的帮助信息'
def __init__(self): # 类的初始化方法
print("Cat 的init方法被调用")
def eat(self): # 自定义方法
print("cat is eating")
def run(self): # 自定义方法
print("cat is running")
如何使用这个类?与调用函数的方式类似,类的使用是通过类名()进行使用,返回的是一个对象,也就是实例。
tom = Cat()
print(tom) # <__main__.Cat object at 0x000001B4A55123C8>
类中不仅仅可以定义函数,还可以定义变量。
class Car(object):
'Car'
CarCount = 0 # 类属性
def __init__(self):
self.name = '法拉利'
Car.CarCount += 1
def run(self):
print("%s" % self.name)
car = Car()
car1 = Car()
其中CarCount是类属性,只要是通过Car类实例化而来的,这些实例化对象便共享这一类属性,而__init__()函数中的name则是实例属性,属于每个实例独有的,虽然变量名相同,但是取值确是可以不同。还有一点这个例子中类的声明方式改变了,使用了python中的新式类的声明方式,即class 类名(object):pass,而之前的是使用的经典类的声明方式,关于两者区别可以看着这里新式类与经典类的区别
class Car(object):
'Car'
CarCount = 0 # 类属性
def __init__(self, name):
self.name = name
Car.CarCount += 1
def run(self):
print("%s is running" % self.name)
car = Car('法拉利')
print(Car.CarCount)
car.run()
car1 = Car('大奔')
print(Car.CarCount)
car1.run()
通过Car.CarCount我们可以发现 CarCount的值改变了,而且是通过不同的实例改变的同一个变量,这更加说明类属性是属于某个类实例化的所有的对象共有的,__init__函数里面比之前又多了一个形参,其中__init__函数被称为类的构造函数,是当一个对象实例化之后自动执行的函数,其中,类的普通的成员函数一般都至少具备一个self参数,比普通的函数稍微特别一点,self是个很神奇的参数,不写不行,当调用类的成员函数时,可以通过打印self查看,我们会看到一般都会打印出<__main__.Car object at 0x000001ABF02D8CF8>这样类似的语句,可以看出self可以用来代表实例化的对象。当调用类中的方法是通过
对象名.函数名()进行调用的。
到这里可以书写简单的类了