python初级笔记5 面向对象

embedded/2025/1/9 12:33:19/

创造类的方式

class 类名(object):

        属性

        方法

类名用大驼峰命名法

函数在类中叫做方法

类名后面的括号用来继承

class Student(object):name = Noneage = Noneid = Noneprint(Student)

结果:

E:\Python\python.exe E:\学习笔记\Python\4.21\1.py 
<class '__main__.Student'>


 实例化对象

对象名=类名()

class Student(object):name = Noneage = Noneid = Noneif __name__ == '__main__':stu1=Student()print(stu1)

默认打印的是内存地址 

结果:

 E:\Python\python.exe E:\学习笔记\Python\4.21\1.py 
<__main__.Student object at 0x0000019F6C192060>


访问实例化对象方法与属性

对象名.方法

对象名.属性

class Student(object):name = Noneage = NoneZhuanye = Noneid = Noneif __name__ == '__main__':stu1 = Student()stu1.id = 2001stu1.name = "vn"print(stu1.name)print(stu1.id)

结果:

E:\Python\python.exe E:\学习笔记\Python\4.21\1.py 
vn
2001


self 

  • self会默认指向调用这个方法的的对象本身,可以修改名称,单值一定,且不参与传参 
  • 打印self指向一块内存地址,是stu1的内存地址
class Student(object):name = Noneage = NoneZhuanye = Noneid = Nonedef hobby(self):print(self)
if __name__ == '__main__':stu1 = Student()stu1.hobby()

结果:

 E:\Python\python.exe E:\学习笔记\Python\4.21\1.py 
<__main__.Student object at 0x0000019F15D72180>

class Student(object):name = Noneage = NoneZhuanye = Noneid = Nonedef hobby(self):print(self.name)if __name__ == '__main__':stu1 = Student()stu1.name = "vn"stu1.hobby()

结果:

E:\Python\python.exe E:\学习笔记\Python\4.21\1.py 
vn


 初始化对象

  • 定义类经常会用到__init__函数(方法),首先需要理解的是,两个下划线开头的函数是声明该属性为私有,不能在类的外部被使用或访问。而__init__函数(方法)支持带参数类的初始化,也可为声明该类的属性(类中的变量)。__init__函数(方法)的第一个参数必须为self,后续参数为自己定义。

  • def __init__(self,参数):

                参数赋值

当使用print输出对象的时候,只要自己定义了__str__(self)方法,那么就会打印从在这个方法中return的数据

  • __str__方法需要返回一个字符串,当做这个对象的描写
class Person(object):def __init__(self,name,age,zhuanye,id):self.name=nameself.age=ageself.id=idself.zhuanye=zhuanyedef eat(self):print("吃饭了")def __str__(self):return f"人的名字是{self.name}"obj1 = Person("zhangsan",55,"liuliu",45678)
print(obj1.name)

在pycharm中对象初始化会自动出现提示标语; 

 结果:

E:\Python\python.exe E:\学习笔记\Python\4.21\2.py 
zhangsan


 练习

class HouseItem(object):def __init__(self,itemname,area):self.name=itemnameself.area=areadef __str__(self):return f"{self.name}的占地面积是{self.area}"
if __name__== '__main__':bed=HouseItem("席梦思",4)chest = HouseItem("衣柜",2.5)table = HouseItem("餐桌", 2)
print(bed)
print(chest)
print(table)

打印对象默认返回内存地址,但是因为用来魔术方法 :def __str__(self):,所以可以返回想要的

结果:

 E:\Python\python.exe E:\学习笔记\Python\4.21\房子.py 
席梦思的占地面积是4
衣柜的占地面积是2.5
餐桌的占地面积是2

class HouseItem(object):def __init__(self,itemname,area):self.name=itemnameself.area=areadef __str__(self):return f"{self.name}的占地面积是{self.area}"class House(object):def __init__(self, House_type,area):self.type = House_typeself.area = areaself.free_area = areaself.item_list = []def add_item(self,item):# print(f"添加的家具是={item}")if self.area < item.area:print("剩余空间不够,放不下")else:self.item_list.append(item.name)self.free_area-=item.areadef __str__(self):return f"房子的户型是{self.type},赋值的总面积是{self.area},房子剩余面积为{self.free_area},占地面积是{self.area-self.free_area},家具列有{self.item_list}"if __name__== '__main__':house=House("三室一厅",21)bed = HouseItem("席梦思", 4)chest = HouseItem("衣柜", 2.5)table = HouseItem("餐桌", 2)house.add_item(bed)print(house)

结果:

 E:\Python\python.exe E:\学习笔记\Python\4.21\房子.py 
房子的户型是三室一厅,赋值的总面积是21,房子剩余面积为17,占地面积是4,家具列有['席梦思']


面对对象的特征:封装、继承、多态



封装:

a、把类的成员全部封装在类中
b、不希望被随意访问,因此在大多数情况下,往往要对对象的属性私有化,提供公开的方法进行访问


私有的成员在类内部才能用方法访问到
私有方法就在类内部调用

python成员私有声明:__属性/方法

访问私有成员:对象名._类名__成员

class Login(object):def __init__(self,u,p):self.name=uself.__passwd=pdef get_passwd(self):return self.__passwddef set_passwd(self,pp):self.__passwd=ppreturn f"新的密码更改为{self.__passwd}"if __name__ == '__main__':obj1 = Login("rtyu",56789)print(obj1._Login__passwd)print(obj1.set_passwd("张三王麻子"))

 结果:

E:\Python\python.exe E:\学习笔记\Python\4.21\封装2.py 

56789
新的密码更改为张三王麻子

_方法名,_变量(不能被其他模块所引用), 主要针对from 模块 import *

封装:全局方法:

#通过我们的全局方法
class Login(object):def __init__(self,u,p):self.name=uself.__passwd=pdef get_passwd(self):return self.__passwddef set_passwd(self,pp):self.__passwd=ppreturn f"新的密码更改为{self.__passwd}"pp=property(get_passwd,set_passwd)if __name__ == '__main__':obj1 = Login("rtyu",56789)print(obj1.pp)#相当于调用了get_passwdobj1.pp = "心得"#相当于调用了set_passwdprint(obj1.pp)

 结果:

E:\Python\python.exe E:\学习笔记\Python\4.21\封装2.py 
56789
心得

第三种封装方法 

#通过我们的全局方法
class Login(object):def __init__(self,u,p):self.name=uself.__passwd=pdef get_passwd(self):return self.__passwddef set_passwd(self,pp):self.__passwd=ppreturn f"新的密码更改为{self.__passwd}"@propertydef passwd(self):return self.__passwd@passwd.setterdef passwd(self,pp):self.__passwd=pp
if __name__ == '__main__':obj1 = Login("rtyu",56789)print(obj1.passwd)obj1.passwd="我是一个新人"print(obj1.passwd)

结果:

 E:\Python\python.exe E:\学习笔记\Python\4.21\封装2.py 
56789
我是一个新人


函数覆盖 

函数重载:存在多个函数名相同的函数,但是参数个数或者参数类型不同,
会使在调用的时候,自动调用对应的参数

  • python里面没有函数重载,python是弱数据类型的语言。
  • python有函数覆盖,相同函数会得到同名的、离调用最近的函数覆盖


继承 

继承:
父类:被继承的一方  超类   基类
子类:继承的那一方

无法继承父亲的私有成员

没有成员的子类 

class Dad(object):def __init__(self,name,age,money):self.name = nameself.age = ageself.money = moneydef eat(self):print("我是父亲爱吃的")def zhuanqian(self):print("爸爸的赚钱")class Son(Dad):passf = Dad("zhangxi",56,"1万")s = Son("二狗",11,100020)
print(s.age)
s.eat()
print(s.money)
print(s.name)
s.zhuanqian()

结果:

E:\Python\python.exe E:\学习笔记\Python\4.21\函数重载.py 
11
我是父亲爱吃的
100020
二狗
爸爸的赚钱

 

 有自己成员的子类

  • super这个方法这个指针指向自己 的父类
  • 自己没有的才会去继承父亲的
class Dad(object):def __init__(self,name,age,money):self.name = nameself.age = ageself.money = moneydef eat(self):print("我是父亲爱吃的")def zhuanqian(self):print("爸爸的赚钱")class Son(Dad):def __init__(self,hobby,age,name):super().__init__("zhangsan",34,"100000")self.age = ageself.name=nameself.hobby = hobbydef zhuanqian(self):print("我的赚钱")f = Dad("zhangxi",56,"1万")s = Son("sing",11,"里斯")
print(s.age)
print(s.money)
print(s.hobby)
print(s.name)
s.zhuanqian()
s.eat()

结果:

E:\Python\python.exe E:\学习笔记\Python\4.21\函数重载.py 
11
100000
sing
里斯
我的赚钱
我是父亲爱吃的


 

方法重写

要是非要想要调用父亲的方法,可以利用super

比如:

def zhuanqian(self):

         super().zhuanqian()



多继承

支持继承多个类

class Dad(object):def __init__(self,name,age,money):self.name = nameself.age = ageself.money = moneydef eat(self):print("我是父亲爱吃的")def zhuanqian(self):print("爸爸的赚钱")class Mon(object):def mon(self):print("mamama")class Son(Dad,Mon):def __init__(self,hobby,age,name):super().__init__("zhangsan",34,"100000")self.age = ageself.name=nameself.hobby = hobbydef zhuanqian(self):print("我的赚钱")f = Dad("zhangxi",56,"1万")s = Son("sing",11,"里斯")
print(s.age)
print(s.money)
print(s.name)
s.zhuanqian()
s.eat()
s.mon()

结果:

E:\Python\python.exe E:\学习笔记\Python\4.21\函数重载.py 
11
100000
里斯
我的赚钱
我是父亲爱吃的
mamama

文章来源:https://blog.csdn.net/cycyzh/article/details/137736050
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ppmy.cn/embedded/23442.html

相关文章

Vue 3 快速上手指南(第二期)

&#x1f4da; Vue 3 快速上手指南 在本文中&#xff0c;我将介绍 Vue 3 的基础知识&#xff0c;我们将了解 1.setup &#x1f4da; 如果你想深入学习 Vue 3&#xff0c;建议阅读官方文档并尝试更复杂的示例和项目。 &#x1f449; 可以通过以下链接访问 Vue 3 官方文档&#x…

初识计算机网络

端系统 "端系统"是指网络中的终端设备或主机&#xff0c;它们是网络通信的起始点和终点。端系统可以是个人计算机、服务器、路由器、智能手机、平板电脑等各种设备&#xff0c;它们通过网络连接进行通信和数据交换。 在因特网中&#xff0c;端系统通过网络协议&#…

vite和webpacke的常规配置

文章目录 1、vite和webpacke的区分2、vite的常规配置介绍主要部分介绍vite基本配置示例 3、webpacke的常规配置介绍主要部分介绍Webpack 基本配置示例 1、vite和webpacke的区分 相同点&#xff1a; 都是构建工具&#xff0c;用于资源打包 &#xff1b; 都有应用到摇树原理 tre…

.NET WinForm开放中的 窗体的 Designer.cs作用

一般窗体窗体 在资源管理器中会呈现 xxx.cs xxx.Designer.cs xxx.resx 》》》 .resx 是存放资源文件的&#xff0c;没啥好说的 xxx.cs 和 xxx.Designer.cs 都是partial类&#xff0c;而他们类名是一样的&#xff0c;所以在编译会生成一个文件。 xxx.Designer.cs 代码中有两…

数字孪生中的新质生产力

随着科技的不断进步和数字化浪潮的席卷&#xff0c;新质生产力和数字孪生这两个概念逐渐进入人们的视野&#xff0c;并在社会经济发展中发挥着越来越重要的作用。新质生产力&#xff0c;作为以劳动者、劳动资料、劳动对象及其优化组合的跃升为基本内涵的新型生产力形态&#xf…

linux 关闭不了docker服务

[rootiZ2ze7y4akbxb1yjoydztxZ ~]# systemctl stop docker Warning: Stopping docker.service, but it can still be activated by: docker.socket 在 systemd 系统中&#xff0c;服务和套接字是分开管理的。docker.socket 是一个套接字单元&#xff0c;用于监听 Docker 的 API…

超详细的Vue脚手架

文章目录 Node.js介绍安装快速入门控制台输出使用函数模块化编程 npm包管理器介绍命令初始化命令本地安装(了解)全局安装(掌握)批量下载淘宝npm镜像(建议使用) Webpack介绍安装快速入门方式一&#xff1a;webpack原始方式方式二&#xff1a;基于NPM方式 webpack-dev-server 开发…

基于Ubuntu-base构建根文件系统

Ubuntu是一个非常常见的发行版系统&#xff0c;具有丰富的软件功能&#xff0c;可以方便的进行各类开发&#xff0c;系统的apt工具更是搭建各种开发环境的神器。当我们在基于X86的电脑Ubuntu完成功能开发后&#xff0c;想要将功能移植到arm板上&#xff0c;使用Ubuntu可以大大节…