python面向对象

这篇博客深入探讨了Python的面向对象编程思想,包括类的定义、对象的创建、继承等核心概念。介绍了类的__new__、__init__、__str__、__del__等特殊方法的作用,以及属性的封装、隐藏和保护。此外,还讨论了继承的原理和多态的特性,并讲解了类属性、对象属性、类方法、静态方法和对象方法的区别。同时提到了property的使用。
摘要由CSDN通过智能技术生成

面向对象

面向对象设计思想:将问题的解决或目标的实现关注于对象本身,对象有什么特点,通过做什么事情来达到目的
面向过程设计思想:将解决问题的重点放在过程上,以过程为中心,关注的是事件本身,通过一系列的过程来完成目标
面向对象,就是多个对象各自完成各自的任务,最后完成整个事情,在这个过程中,有两个重要的概念,一个是类,一个是对象:就是具有共同特征和行为的一组对象的定义,可以说为一个整体的抽象,比如人类,动物类
对象:是一个具体存在的,由类具体化构建出来的东西,相当于一个人,一只猫
关系:对象是类中构建出来的具体存在的,而类是对一堆具有共同特征,共同行为的对象的抽象

类的定义和对象的创建

使用关键字class来定义类,遵守编码规范,类名首字母要大写,使用大写首字,也就是大驼峰法命名,抽象出一个具体的对象只需要 对象名=类名()就可以了

#定义一个类,由类抽象出一个对象

class Man():
	def run(self):
		print("I am runing")
		
		
man1 = Man()
man1.run()

在这里插入图片描述
在定义方法的时候要写参数self,也就是对象,但是不用传入参数,因为self代表当前调用fun本身对象,也就是自己
面向对象有三大特征,封装,继承,多态。我们通过类来抽象出对象,由于对象本身具有类的方法和属性,就可以互相使用和协作,共同完成一件事情。封装就是指将数据封装到对象里面去,需要通过属性来封装。
对象创建方法__new__
这是在有类来构建对象时候首先调用的方法,默认返回当前这个类的对象,属于自动调用然后返回一个对象,在设计模式中需要使用__new__方法来保证只有一个对象,也就是只调用一次创建对象方法。
初始化方法__init__
这个方法是用来对对象初始化的,由解释器自动调用,我们可以在对象初始化的时候传递参数来将对象的属性封装进去,这样的话在类内的其他方法可以访问,在构建对象之后对象本身也可以访问

#定义一个类,由类抽象出一个对象
class Man():

	def __init__(self, name, age):
		self.name = name
		self.age = age
		
	def run(self):
		print("I am %s"%self.name)#内部访问
		print("I am runing")


man1 = Man("albert", 23)
man1.run()
print("I am %s years old"%man1.age)#类外通过对象访问

在这里插入图片描述
__str__方法可以打印一些关于对象的信息,在原有的基础上我们再加上这个方法

#定义一个类,由类抽象出一个对象
class Man():

	def __init__(self, name, age):
		self.name = name
		self.age = age

	def __str__(self):
		return "this is a function for print infomation about object"

	def run(self):
		print("I am %s"%self.name)#内部访问
		print("I am runing")


man1 = Man("albert", 23)
print(man1)
man1.run()
print("I am %s years old"%man1.age)

在这里插入图片描述
关于属性的隐藏和保护,python中有关于对象的隐藏属性和隐藏方法的语法,以双下划线开头的方法不可以在外部直接修改访问,内部可以调用,类似于C++和Java中的Public和Private

#定义一个类,由类抽象出一个对象
class Man():

	def __init__(self, name, age, pwd):
		self.name = name
		self.age = age
		self.__pwd = pwd
		
	def __str__(self):
		return "this is a function for print infomation about object"
		
	def run(self):
		print("I am %s"%self.name)
		print("I am runing")


man1 = Man("albert", 23, 123456)
print(man1.__pwd)#外部不可以访问

在这里插入图片描述

#定义一个类,由类抽象出一个对象
class Man():
	def __init__(self, name, age, pwd):
		self.name = name
		self.age = age
		self.__pwd = pwd

	def __str__(self):
		return "this is a function for print infomation about object"

	def run(self):
		print(self.__pwd)#内部访问
		print("I am %s"%self.name)
		print("I am runing")


man1 = Man("albert", 23, 123456)
man1.run()

在这里插入图片描述
这种属性的隐藏方法在外部不可以直接访问,但是我们可以通过自己设置getter和setter方法在外部间接地访问和修改数据,相当于预留了接口用来操作私有属性

#定义一个类,由类抽象出一个对象
class Man():

	def __init__(self, name, age, pwd):
		self.name = name
		self.age = age
		self.__pwd = pwd

	def getter(self):
		return self.__pwd
		
	def setter(self, pwd):
		self.__pwd = pwd

 
man1 = Man("albert", 23, 123456)
print("修改前的密码是:"+str(man1.getter()))
man1.setter(456789)
print("修改后的密码是:"+str(man1.getter()))

img
__del__方法
这个方法是在程序运行结束的时候销毁对象的方法,相当于析构函数

#定义一个类,由类抽象出一个对象
class Man():

	def __init__(self, name, age, pwd):
		self.name = name
		self.age = age
		self.__pwd = pwd

	def getter(self):
		return self.__pwd

	def setter(self, pwd):
		self.__pwd = pwd

	def __del__(self):
		print("对象正在销毁")


man1 = Man("albert", 23, 123456)
print("修改前的密码是:"+str(man1.getter()))
man1.setter(456789)
print("修改后的密码是:"+str(man1.getter()))

img
可以看到我们并没有调用,但是仍然自动执行了这个函数销毁对象。
在属性名前加上单下划线表示在内部外部都可以访问,但是在导入至别的模块的时候不会一块导入,这种命名虽然在外部可以访问,但是不建议这样做。

继承

继承可以提高代码的重用性,有些重复的功能不用写,继承需要在定义class的时候在括号内加上父类的名字,在python中可以有多重继承,也就是一个子类可以继承多个父类,在子类中,若是重写方法,则不会继承父类中的方法,会优先使用子类中的方法,继承的本质是继承__init__方法才继承父类的公有属性,在多重继承中是按照父类名字的先后按照顺序依次调用的,优先级有先后顺序,若是没有直接的继承关系,则是直接继承所有类的顶级父类object。

class Man():

	def __init__(self, name, age):
		self.name = name
		self.age = age


class China(Man):#继承父类Man

	def print_name(self):
		print(self.name)#并未定义name,age等属性,但是由于继承了父类,所以拥有这些属性


albert = China("albert", 23)
albert.print_name()

在这里插入图片描述
多重继承,可以拥有多个父类的方法

class Man():

	def __init__(self, name, age):
		self.name = name
		self.age = age


class Student():

	def __init__(self, name, age):
		self.name = name
		self.age = age

	def study(self):
		print("I am study")


class China(Man, Student):#继承父类Man

	def print_name(self):
		print(self.name)#并未定义name,age等属性,但是由于继承了父类,所以拥有这些属性


albert = China("albert", 23)
albert.print_name()
albert.study()

在这里插入图片描述
多重继承的优先级,由于是优先继承Man的方法,所以当Man类拥有study方法的时候,优先调用Man的

#定义一个类,由类抽象出一个对象
class Man():

	def __init__(self, name, age):
		self.name = name
		self.age = age

	def study(self):
		print("he is not study")


class Student():

	def __init__(self, name, age):
		self.name = name
		self.age = age

	def study(self):
		print("I am study")

 
class China(Man, Student):

	def print_name(self):
		print(self.name)


albert = China("albert", 23)
albert.print_name()
albert.study()

img
如果子类的方法名和父类的方法名相同,则不会调用父类的方法,但是有些时候需要用到,在python中可以使用super来调用父类的方法,使用如下:

class Man():

	def __init__(self, name, age):
		self.name = name
		self.age = age
		print("我是父类的初始化方法")

 
class China(Man):

	def __init__(self, name, age):
		super().__init__(name,age)
		print("我是子类的初始化方法")


albert = China("albert", 23)

img
多态:python语言作为一种弱类型的语言,多态的体现并不明显,所以并不多做介绍
关于类属性和对象属性的概念
类属性:是指类所具有的属性,在这个类下的所有对象均可以共享这个属性
对象属性:由类抽象出来具体的对象所具有的属性,归对象本身所有,其他的同一个类抽象出来的对象不能访问和操作。

class Man():

	propety = "我是类属性"

	def __init__(self, name, age):
		self.name = name
		self.age = age
		self.propety_object = self.name+"对象属性"


albert = Man("albert", 23)
print(albert.propety)
print(albert.propety_object)
jay = Man("jay", 24)
print(jay.propety)
print(jay.propety_object)

img
公有的类属性可以被子类继承,私有的类属性不可以被子类继承,类属性的修改需要通过类来进行操作。
类方法:@classmethod,写在方法上面相当于java中的注解,加上了一个修饰器,参数加(cls)
静态方法:@staticmethod,相当于特殊的类方法,没有特定默认参数,可以通过类名来调用
对象方法:就是普通方法,参数加(self)
property的使用
这个相当于是对get和set方法的升级

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python面向对象编程是一种编程范式,它将程序组织成对象的集合,每个对象都有自己的属性和方法。在Python中,可以通过定义类来创建对象,并通过实例化类来创建具体的对象。引用[1]中的代码示例展示了一个Animal类,其中包含了初始化方法和一个__str__方法来返回对象的描述信息。通过这个类,可以创建Animal对象,并通过print函数输出对象。引用中的代码示例展示了如何使用@property装饰器来定义类的属性和属性的访问方法。通过这种方式,可以在访问属性时像访问普通属性一样使用点号,而不需要使用方法调用的方式。引用中的代码示例展示了多态在Python中的应用。多态是面向对象编程的重要概念,它允许不同的对象以相同的方式对外部访问,但具体的实现可能不同。在这个示例中,father、son和daughter类都继承了father类,并重写了tell方法。通过调用不同的对象的tell方法,可以看到不同的输出结果。总之,Python面向对象编程是一种灵活且强大的编程方式,它允许开发者以对象为中心来思考和组织代码,提高了代码的可读性和可维护性。通过定义类、创建对象和使用类的属性和方法,可以实现丰富多样的功能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Python面向对象(全套)](https://blog.csdn.net/Thewei666/article/details/126652501)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值