类可以一个总的概括名称,比如人类,人类里面有子类,比如男人,女人等等,男人女人就可以继承人类这个大类。
1 首先是定义:
class person():
pass
xiaoming=person()
2 __init__初始化
每次定义声明的时候都会首先执行__init__函数。注意__init__前后是两个下划线。
class person():
#name="NULL" #和c不同的是这里可以省略
def __init__(self,name):
self.name=name #此处同时也声明了一个name变量
xiaoming=person("xm")
print(xiaoming.name)
输出:xm
3 进一步理解
class person():
name="NULL"
weight=0
def __init__(self,name):
self.name=name
def set_weight(self,w):
self.weight=w
def print_weight_and_name(self):
print("名字:",self.name,"体重:",self.weight)
xiaoming=person("xm")
xiaoming.set_weight(130)
xiaoming.print_weight_and_name()
输出:名字: xm 体重: 130
4 继承
woman继承了person类
class person():
name="NULL"
weight=0
def __init__(self,name):
self.name=name
def set_weight(self,w):
self.weight=w
class woman(person):
sex="NULL"
height=0
def __init__(self,name):
self.name=name
self.sex="girl"
def set_height(self,h):
self.height=h
xiaohua=woman("xh")
xiaohua.set_weight(100)
xiaohua.set_height(140)
print(xiaohua.name,xiaohua.sex,xiaohua.height,xiaohua.weight)
输出:xh girl 140 100
子类会继承父类的变量和函数。子类可以调用父类的变量和函数。
子类可以重写父类的函数,如上个例子中__init__函数就进行了重写,比父类的__init__多出了个self.sex="girl"
5 __getitem__
这个函数可以对类里面的变量进行迭代遍历,但是因为变量不止一个,所以可以通过重写这个函数自定义实现遍历哪些变量。
class Animal:
def __init__(self, animal_list,age):
self.animals_name = animal_list
self.animals_age=age
def __getitem__(self, index):
return self.animals_name[index]
animals = Animal(["dog","cat","fish"],[1,2,3])
for animal in animals:
print(animal)
假设有一个动物类,我们在定义的时候就传入dog cat fish,1 2 3 来对类中self.animals_name和self.animals_age初始化,__getitem__此时重写里面可以看到是对animals_name进行迭代。所以在对animal进行for遍历时输出的就是name
改成这样就可以输出名字和年龄了:
def __getitem__(self, index):
return self.animals_age[index],self.animals_name[index]
参考: