每个function仅负责自己的部分,只知道埋头苦干,脑袋里却没有big picture。
对象站的更高一点,他知道自己是谁、拥有什么、可以做什么。
如果对象所指的是特定的一个人,那么类就是指一类人。
类是由class 类名:
定义的。像这样:
class Man:
def __init__(self, name, chinese_name, age, height, weight):
self.name = name
self.chinese_name = chinese_name
self.age = age
self.height = height
self.weight = weight
def eat(self):
self.weight = self.weight + 5
print('After %s eats something, his weight comes to %d.' % (self.name,self.weight))
def grown_up(self,year):
self.age = self.age + year
print('%d year later, the age of %s comes to %d.' % (year,self.name,self.age))
其中包含了两个部分。
__init__
函数的作用就是将所有传入的参数变成某个属于Man
类对象的属性。
self
指代的就是这个Man
,而.
可以理解成的
。
self.name = name
的意思其实就是他的name属性的值是传入的那个name值。
现在不是把传入的name值赋值给某个变量了,而是把它赋值给某个属于Man
类对象的name属性。
eat
和grown_up
两个函数就是属于Man
类的对象可以调用的方法。
它们可以从self
中获取当前对象的属性值。
下面这样的用法,其实就是对属性值进行更新。
self.weight = self.weight + 5
self.age = self.age + year
至于print
内的字符串用法,只要关注打印结果就好,在step3中会详细讲的。
对象通过对类进行实例化来生成。
现在我们声明一个叫做xiaoming
的变量,并将一个Man
类实例化后赋值给它。
xiaoming = Man('Bob','小明',12,120,40)
这里,Man
后面括号中的内容即是__init__
函数中所定义的要传入的参数。
xiaoming
现在成为一个Man
对象,其属性和方法就都设置好了。
我们可以通过.属性名
的方法来获取xiaoming
的体重并打印出来。
print(xiaoming.weight)
# 40
也可以将xiaoming
的年龄赋值给this_year_age
再打印。
this_year_age = xiaoming.age
print(this_year_age)
# 12
我们可以通过.方法名()
来执行某种行为,例如:
xiaoming.eat()
# After Bob eats something, his weight comes to 45.
当然方法名后面的括号里也可以携带参数,因为其本身就是一个函数。例如:
xiaoming.grown_up(5)
# 5 years later, the age of Bob comes to 17.
对象的抽象程度比函数要高,因为一个Class既包含数据,又包含操作数据的方法。