1.面向对象的三大特性
- 封装
- 继承
- 多态
2.类与对象的理解与封装特性
类是事物抽象的集合,对象是事物具象的个体。(类–>实例化–>对象)
面向对象编程语言
- 类: 一个模板, (人类)—是一个抽象的, 没有实体的
- 对象: (eg: 张三, 李四)
- 属性: (表示这类东西的特征, 眼睛, 嘴巴, 鼻子)
- 方法: (表示这类物体可以做的事情, eg: 吃饭, 睡觉,学习)
3.定义类
格式:class 类名(object)
object代表是, 人类继承于哪一个类, 如果不知道继承哪个类, 就写object
class person(object):#构造函数def __init__(self,name,age,sex) -> None:self.name = nameself.age = ageself.sex = sexpass#say函数def say(self,say):print("%s在说话:%s"% (self.name, say))pass#使用print,返回return的内容def __str__(self) -> str:return "Persons类的对象 姓名:%s, 年龄:%s, 性别:%s" % (self.name, self.age, self.sex)passdef __del__(self):print("名字为%s的对象销毁,执行析构函数"% self.name)pass# 类实例化为对象
p1 = person("deng",18,"男")
p2 = person("xiaodeng",20,"女")# 调用say函数
p1.say("hello world")# 使用print,返回__str__(self)中return的内容
print(p1)
print(p2)# 使用del,返回__del__(self)中return的内容
del p1
del p2
3.类的私有属性与方法
实例:定义一个关于银行用户的类
# 定义一个关于银行用户的类
class BankUser():# 定义构造函数def __init__(self,username, password, money) -> None:self.__username = username # 在属性名前加上__变为私有属性self.__password = passwordself.__money = money# 显示用户名的方法(公共方法)def showName(self) -> str:return self.__username# 显示用户余额的方法(公共方法)def showAccount(self) -> float:return self.__money# 取款的方法def withdrawal(self, count) -> bool:password = input("请输入帐户密码:")# 判断密码if password != self.__password:print("密码错误")return False# 判断余额if count > self.__money:print("帐户余额不足")return False# 取款成功self.__money -= countprint('取款成功。帐户余额为:%s'% self.__money)def __test(self):print("这是一个私有的测试方法")def publicTest(self):print("这是一个公有的测试方法")# 调用私有的方法self.__test()def __str__(self) -> str:return "用户:%s, 存款余额为:%s"%(self.__username, self.__money)user1 = BankUser("alex", "123123", 1000)print(user1)
print(user1.showName()) #通过公共方法来执行私有属性
print(user1.showAccount()) #通过公共方法来执行私有属性# user1.__test() #调用不了,需要通过一个公共方法来调用这个私用方法,如下所示
user1.publicTest()# user1.withdrawal(500)
4.类的继承
# 定义一个动物类(基类)
class Animals(object):def __init__(self, name, age):self.name = nameself.age= ageprint("动物类的构造函数执行完成")def eat(self):print('eating......')# 定义一个狗类(派生类)
class Dog(Animals):def __init__(self, name, age, type):# 先执行父类的构造函数super().__init__(name, age) # super()方法指向类父# 添加该类的新的属性self.type = typeprint("狗类的构造函数执行完成")# 狗吃的东西的类进行重写def eat(self):super().eat()print("我喜欢吃骨头")passclass Cat(Animals):def __init__(self, name, age, color):super().__init__(name, age)self.color = colordef eat(self):super().eat()print("我喜欢吃鱼") dog1 = Dog("旺财", 2, "中华田园犬")
print(dog1.type)
dog1.eat()cat1 = Cat("咪咪", 3, "奶牛色")
print(cat1.color)
cat1.eat()