面向对象编程是最有效的软件编写方法之一。在面向对象编程中, 你编写表示现实世界中的事物和情景的类,并基于这些类来创建对象。
一、创建和使用类
1、创建类
类可以表示任何的事物,可以是人,可以是动物,也可以是其他的东西。例如,我们定义了一个名为People的类,这个人有名字和年龄两个属性,并且提供了两个方法打印他的名字和年龄:
class People:
def __init__(self, name, age):
self.name = name
self.age = age
def get_name(self):
print(self.name)
def get_age(self):
print(self.age)
创建类时,需要注意:
(1)在Python中,类的首字母大写。
(2)__init__()是一个特殊的方法,可以理解为Java类的构造函数,每次创建对象时Python会先调用该方法。开头和末尾各有两个下划线,这是一种约定,避免Python默认方法与普通方法发生名称冲突。
(3)__init__()定义成了包含三个形参:self、name和age。在这个方法的定义中,self必不可少且必须位于其他形参的前面。
(4)创建对象时,不需要指定self,只需要传入其他的形参。
2、创建实例
我们创建实例people,指定了他的name和age,并且我们分别通过调用其两个方法和访问其两个属性去输出他的名字和年龄。
people1 = People("Amy", "18")
# 调用方法
people1.get_name()
people1.get_age()
# 访问属性
print(people1.name)
print(people1.age)
3、属性默认值
还是以People这个类来说,我们提供了两个属性name和age。接下来,我们想给他提供一个默认属性,例如这里的People默认是中国人,那么我们可以指定一个默认属性country:
class People:
def __init__(self, name, age):
self.name = name
self.age = age
self.country = "China"
def get_name(self):
print(self.name)
def get_age(self):
print(self.age)
def get_country(self):
print(self.country)
people1 = People("Amy", "18")
# 调用方法
people1.get_name()
people1.get_age()
people1.get_country()
4、修改属性
接着上面的例子,那如果确实出现了其他国籍的people,怎么办?或者People1的名字错了,想修改一下,怎么办?我们可以修改属性的值。
(1)直接修改属性值
要修改属性的值,最简单的方式是通过实例直接访问它。例如:
people2 = People("Tom", "19")
people2.country = "Japan"
# 调用方法
people2.get_name()
people2.get_age()
people2.get_country()
(2)通过方法修改属性值
更多情况下,跟java一样,我们会提供一些方法去更新属性的值,例如:
people2 = People("Tom", "19")
people2.country = "Japan"
# 调用方法
people2.get_name()
people2.get_age()
people2.get_country()
people2.set_name("Bob")
people2.get_name()
二、继承
跟Java一样,Python也存在类的继承。接下来我们要实现People类的一个子类Chinese:
class Chinese(People):
def __init__(self, name, age):
super().__init__(name, age)
people3 = Chinese("Ming", "20")
people3.get_name()
people3.get_age()
people3.get_country()
注意:super()而不是super,这里需要跟Java区分开。
1、给子类定义属性和方法
子类可以具备区别于父类的新属性和新方法。例如,我们给Chinese增加省份这么个属性,并且新增一个方法打印省份:
class Chinese(People):
def __init__(self, name, age):
super().__init__(name, age)
self.province = "shandong"
def print_province(self):
print(self.province)
people3 = Chinese("Ming", "20")
people3.get_name()
people3.get_age()
people3.get_country()
people3.print_province()