实践中,多次会看到类class、def等关键词。
表面理解:哦,这是一个类!这是一个函数!实际上,它到底是什么意思呢???
还是好好系统的形成概念!
目录
1 面向对象
2 定义类
3 创建对象
4 类的成员
5 封装性-项目重点关注对象!
6 继承性
7 多态性
面向对象是一种编程思想,即按照真实世界的思维方式构建软件系统。
案例:
以校园管理系统为例:
学生和老师作为不同的人群(类),学生A和学生B是学生类的个体(对象/实例)。
以汽车品牌为例:
所有的车都是车类(类),不同的品牌就是不同的个体(对象/实例)。
实际上,python的数据类型都是类,同时我们可以自定义类,即创建一种新的数据类型。这在项目中非常常见!样式如下:
class 类名[(父类)]:
类体
- 以英文半角冒号结尾
- 缩进4个半角空格
- 父类可以省略申明,表示直接继承object类
class Car(Object):pass #占位等后续操作
类相当于一个模板,依据这样的模板来创建对象,也就是类的实例化,所以对象也被称之为“实例”
class Car(object):passcar = Car()
# 创建小汽车对象
# 括号表示调用构造方法,构造方法用于初始化对象
类体中可以包含类的成员:
class Dog: # 类变量home = Kitty# 构造方法 # 类中self表示当前对象def __init__(self, name, age,sex = "雌性": # 构造方法,self表示实例,第一个必须是selfself.name = name # 创造和初始化实例变量self.age = age # 创造和初始化实例变量# 实例方法def run(self): # 定义实例化方法,只有self一个参数print("{}在跑...".format(self.name))# 实例方法def speak(self, sound): # 定义实例化方法,第一个参数是self,第二个是soundprint(' {}在叫,"{}"! '.format(self.name, sound))# 类方法@classmethoddef look_by(cls, num) # cls代表自身,即Dog类return cls.home*numdog = Dog('球球',2) # 创造对象,调用构造方法时,省略默认值,不需要传入self参数
dog2 = Dog(name='花花',age=2) # 使用关键字参数调用构造方法
dog.run() # 调用时采用“对象.实例方法”形式,不需要传递参数
dog.speak('汪 汪 汪') # 需要传递一个函数
print('主人家:{0}'.format(Dog.home)) # 调用时采用“类名.类变量”形式
num_home = Dog.look_by(500) # 对类的方式可以通过“类名.类方法”形式访问
封装性是面向对象重要的基本特性之一。封装隐藏了对象的内部细节,只保留了有限的对外接口,外部调用者不用关心对象的内部细节,使得操作对象变得简单!(这个part应该是项目重点!)
class Dog():# 构造方法def __init__(self, name, age, sex='雌性'):self.name = nameself.__age = age# 实例方法def run(self): print("{}在跑...".format(self.name))# get方法def get_age(self): return self.__age# 属性替代get方法@propertydef age(self):return self.__age# set方法def set_age(self, age): self.__age = age# 属性替代set方法@age.setterdef age(self, age):self.__age = agedog = Dog('球球',2)
print('狗狗的年龄:{}'.format(dog.get_age()))
dog.set_age(3)
print('修改后狗狗的年龄:{}'.format(dog.get_age())) # 属性赋值
print('狗狗的年龄:{}'.format(dog.age))
dog.age = 3
print('修改后狗狗的年龄:{}'.format(dog.age))
继承性也是面向对象重要的基本特性之一。项目中也很常见的操作!较为好理解!
继承关系,顾名思义。
如:
猫属于动物,动物就是父类(一般类),猫是子类(特殊类)。
特殊类拥有一般类的全部数据和操作,即猫具有动物的全部特征和行为。
称,子类继承父类。
# 定义父类动物
class Animal:def __init__(self, name):self.name = namedef show_info(self):return "动物的名字:{0}".format(self.name)def move(self):print("动一动...")# 定义子类猫
class Cat(Animal):def __init__(self, name, age):super().__init__(name) # 调用父类构造方法,初始化父类成员变量self.age = age # 实例变量agecat = Cat('Tom', 2)
cat.move()
print(cat.show_info())
多态性也是面向对象的基本特性之一。多态指对象可以表现出多种形态。
在多个子类继承父类,并重写父类方法后,这些子类所创建的对象之间就是多态。这些对象采用不同的方式实现父类的方法。