Python:面对对象编程 类和对象,访问控制,继承,多态

本文详细介绍了Python中类和对象的概念,包括类的命名规则、属性和方法的区别,私有属性的使用,继承机制,以及多态性在实际开发中的应用。通过实例展示如何创建类、子类,以及如何利用封装、继承提高代码复用性和灵活性。
摘要由CSDN通过智能技术生成

类和对象

简单来说类就是模板,对象由模板生成。
类的命名采用大驼峰命名法,即首字母大写;
对象的命名用小驼峰命名法。
eg:person=Person(“Tom”,20) 其中person是对象名,Person是类名。

类的属性
class Person(Object):  #默认继承object类 object类是所有类的基类
	hairColor="black"

类的属性就是共有属性,假设所有人的头发都是黑的,头发颜色为黑色作为Person类的属性,则之后定义的每一个对象的hairColor都是black。
在这里插入图片描述

对象的属性
class Person(object);
	hairColor='black'
	def __init__(self,name,age):
		self.name=name
		self.age=age

其中的self.nameself.age为对象的属性
在这里插入图片描述

类的方法
class Person(object):
	hairColor='black'
	def __init__(self,name,age):
		self.name=name
		self.age=age
	
	@classmethod
	def hairColorChange(cls,color):
		cls.hairColor= color

关键在于@classmethod,它下面的就是类的方法。在这里插入图片描述

对象的方法
class Person(object):
	hairColor='black'
	def __init__(self,name,age):
		self.name=name
		self.age=age
	
	@classmethod
	def hairColorChange(cls,color):
		cls.hairColor= color
	def printInfo(self):    # 对象的方法 自动传入self
		print(self.name+":"+str(self.age))

输出结果如下:
在这里插入图片描述

注意:类名不可以访问对象的属性和方法,类名只有访问类的对象和方法。对象可以访问对象的属性和方法也可以访问类的属性和方法。因为类是公共的,相当于一个模板,所以对象可以访问类的属性和方法。

打包一个模块,快捷键:ctrl+alt+空格

访问控制

对象里的一些属性可能不想对外暴露,可以将其设置为私有属性,外界无法访问也无法改变。
class Person(object):
	hairColor='black'
	def __init__(self,name,age):
		self.name=name
		self.__age=age
	
	@classmethod
	def hairColorChange(cls,color):
		cls.hairColor= color
	def printInfo(self):    # 对象的方法 自动传入self
		print(self.name)

假设我们并不希望可以从外界访问到对象的年龄,于是我们在__init__中对象的属性age前加两个下划线,即变为私有属性。再访问age时报错,AttributeError: ‘Person’ object has no attribute ‘age’。
在这里插入图片描述
设置为私有属性之后,需要访问或改变对象的属性,只需要再添加set_age,get_age方法即可。

class Person(object):
	hairColor='black'
	def __init__(self,name,age):
		self.name=name
		self.__age=age
	
	@classmethod
	def hairColorChange(cls,color):
		cls.hairColor= color
	def printInfo(self):    # 对象的方法 自动传入self
		print(self.name)
	def get_age(self):
		return self.__age
	def set_age(self,age):
		self.__age=age

在这里插入图片描述

继承

新的class称为子类(subclass),被继承的class称为基类、父类或超类。
继承可以把父类的所有功能都直接拿过来,这样就不必重零做起,子类只需要新增自己特有的方法,也可以把父类不适合的方法覆盖重写,具体可看下文中run的调用。super() 函数是用于调用父类(超类)的一个方法。
为了更加明显的体现出子类与父类之间的关系,我们向Person类中增加一个对象的方法run,具体如下:

class Person(object):
	hairColor='black'
	def __init__(self,name,age):
		self.name=name
		self.__age=age
	
	@classmethod
	def hairColorChange(cls,color):
		cls.hairColor= color
	def printInfo(self):    # 对象的方法 自动传入self
		print(self.name)
	def get_age(self):
		return self.__age
	def set_age(self,age):
		self.__age=age
    def run(self):
        print("Person Running")

定义Student子类,如下:

class Student(Person):
    def __init__(self,name,age,major):
        super(Student,self).__init__(name,age)  # 初始化父类
        self.major=major   # 初始化自己的属性
    def run(self):
        print("Student Running")

在这里插入图片描述
子类Student中的run覆盖了Person中的run。

多态

新增一个Person的子类,不必对testOverLoad()做任何修改,实际上,任何依赖Person作为参数的函数或者方法都可以不加修改地正常运行,原因就在于多态。
开闭原则
“开”,对扩展开放,即可以向Person中增加子类
“闭”,对修改封闭,不需要修改依赖Person的testOverLoad函数

def testOverLoad(obj):
    obj.run()
testOverLoad(person)
testOverLoad(student)

运行结果如下:
在这里插入图片描述

类的三大特征:封装 继承 多态

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值