学习python入门基础——类和对象
2022/6/17 1:23:00
本文主要是介绍学习python入门基础——类和对象,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
一、概念
1.1、类
拥有相同属性和功能的对象的集合,一类事物的抽象
命名:用大驼峰(例如:Test01)
1.2、对象/类实例
类的实体(类的具体)
1.3、封装
隐藏了对象的属性和实现细节,只是对外提供接口或者入口
二、类的创建
class 类名称:
class 类名称():
class Dog:
三、属性
3.1、类属性
1、概念:定义在类里面,在方法(函数)外面的属性
2、类属性访问
1)类.类属性名称
2)实例.类属性名称
3.2、实例属性
1、概念:定义在__init__(初始化方法)中,self.xxxx
2、实例属性访问
1)在类里面访问:self.实例方法
2)在类外面访问:类().实例方法
3)类不能访问实例属性
3.3、私有属性
1、概念:不能被外部访问的属性或者不想让子类继承的属性,通过双下划线命名
2、类的私有属性:__类属性名称
3、实例私有属性:self.__实例属性名称
class Dog: name='小黑' #类属性,属性可全局使用 __dog_color='白色' #类私有属性 def __init__(self): #初始化方法,会自动调用,属性可全局使用 self.color='黑色' #实例属性 self.__kind='中华田园犬' #实例私有属性 print('初始化方法') #实例方法 def eating(self): print(Dog.name,'正在吃骨头。。。') #类属性访问:类.类属性名称 print('狗颜色',self.color) self.sleep() #在类里面用实例(self)调用实例方法(self.实例方法) def sleep(self): print('类私有属性',Dog.__dog_color) #类私有属性访问 print('类实例私有属性',self.__kind) #类实例私有属性访问 if __name__=='__main__': #函数入口,被其他调用时,这个下面的是不会访问的 a=Dog() #实例化 print(a.name) #类属性访问:类实例.类属性名称 print(a.eating()) #在类外面用类实例调用实例方法(类().实例方法) print(a.sleep()) #类实例私有属性不能在外访问,只能通过调用类实例方法
四、方法
4.1、初始化方法:__init__(self)
1、用于创建实例属性,在类实例化后自动调用,执行完后才会执行调用函数
2、self:类实例本身,是个占位符,可写任意,习惯写法写self
4.2、实例方法
1、概念:定义在类中,第一个参数【实例对象】,习惯用self来表示类实例
2、调用:实例.方法()
class Test: color='白色' #类属性 def __init__(self): #初始化方法,用于创建实例属性,在实例化后自动执行 self.color='heise' #实例属性 self.name='2021' #实例属性 print(self.name,self.color) #self.实例方法 def test01(self): #实例方法 print('test01方法') return 0 def test02(self): #实例方法 self.test01() #函数调用(类里面) if __name__ == '__main__': a=Test() #实例化 a.test02() #函数调用(类外面)
4.3、类方法
1、概念:定义在类中,通过@classmethod修饰之后的方法,第一个参数是类本身,习惯用cls占位,cls类本身
2、调用
1)类.类方法
2)类实例.类方法
3、与实例方法的区别
1)类方法可以用类或类实例调用,实例方法只能实例化调用
2)类方法可以用类属性,但不能用实例属性
3)类方法通常用cls占位,实例方法通常用self占位,要区分开
class Test01: name='大黄' def test01(self): #实例方法,self实例本身 self.color='黄色' return self.color @classmethod #定义在类中,通过@classmethod修饰之后的方法,叫类方法 def test02(cls): #类方法,cls类本身 print('test02') if __name__ == '__main__': print(Test01.name) #可以直接调用类属性 Test01.test02() #可以直接同类调用类方法(类.类方法) Test01().test02() #也可以用类实例调用类方法(类实例.类方法)
4.4、静态方法
1、概念:定义在类中,通过@staticmethod修饰后的方法,没有参,没有self,cls(类和类实例)
2、调用
1)类.静态方法
2)类实例.静态方法
3、与类方法的区别
1)相同点
都是在类里,可以通过类直接调用
都可以被实例调用
2)不同点
类方法可以使用类的属性和静态方法
静态方法不可以使用类的属性和方法
3)使用场景:当类不能重复初始化时,可以使用类方法和静态方法
class Test01: name='大黄' def test01(self): self.color='黄色' return self.color @classmethod #定义在类中,通过@classmethod修饰之后的方法,叫类方法 def test02(cls): #cls是类本身,无法使用实例方法,实例属性 print('test02') cls.test03() #使用静态方法 return cls.name #使用类属性 @staticmethod #定义在类中,通过@staticmethod修饰后的方法,叫静态方法,可以不传参,没有类,实例 def test03(): #无法使用类属性、类方法、实例方法 print('test03') if __name__ == '__main__': print(Test01().test02()) #用类或类实例调用类方法(类/类实例.类方法) print(Test01().test01()) #只能类实例化后调用实例方法(类实例.实例方法) Test01.test03() # 可以直接同类调用静态方法(类.静态方法) Test01().test03() # 也可以用类实例调用静态方法(类实例.静态方法)
4.5、私有方法
1、概念:不想让子类继承的方法,通过双下划线命名
2、私有方法:__私有方法(self)
__sleep(self):
五、使用场景
5.1、类属性/方法:不需要实例化,不能重复初始化,直接访问类的属性和方法
5.2、实例属性/方法:全局使用属性,类里面的方法相互调用,使用实例属性和方法
5.3、私有属性/方法:封装过程中避免类内部的方法被外部错误使用
六、类的特性
6.1、继承
6.1.1、单继承
1、概念:子类只继承一个父类后,就可用父类的属性和方法(私有属性和私有方法不能被继承)
2、语法:class 函数2(函数1):
函数2是子类,函数1是父类,函数2继承函数1
class Test02(Test01): #Test02继承Test01
3、子类调用父类方法
1)在子类里面调用:self.属性/方法
如果子类和父类有相同名称的属性或方法,优先使用子类自己的属性或方法
2)在子类外面调用:类实例.方法
3)super().属性/方法
直接从父类寻找对应的方法和属性
4、如果不写继承的类,则默认继承python的基类(object)
例1: class Test01: def __init__(self): self.name='静静的' print(self.name) def test01(self): print('吃饭') def test02(self): print('睡觉') class Test02(Test01): #Test02继承Test01 def __init__(self): super().__init__() #从子类里面调用,直接去父类调用方法 self.test02() #从子类里面调用,先在子类方法里调用,没有再去父类 if __name__ == '__main__': b=Test02 () b.test01() #从子类外面调用
例2: class Test01: def __init__(self): print('Test01>>>初始化') def test01(self): print('Test01>>>test01') def __test02(self): print('Test01>>>__test02') class Test02(Test01): #Test02继承Test01 def __init__(self): print('Test02>>>初始化') def test01(self): print('Test02>>>test01') def test03(self): print('Test02>>>test03') self.test01() #self.方法时,若子类本身有该方法就用自己的,没有则用父类的 super().__init__() #super().__init__()用来直接调用父类的初始化方法 super().test01() #super().方法,直接调用父类的方法 if __name__ == '__main__': a=Test02() a.test01() a.test03()
6.1.2、多继承
1、概念:子类继承多个父类,就会继承父类的所有属性和方法(私有属性和私有方法不能被继承)
2、语法:class 函数3(函数1,函数2):
函数3是子类,函数1和函数2都是父类
class Test03(Test02,Test01): #Test03继承Test02和Test01
3、根据继承顺序调用
class Test01: def test01(self): print('Test01>>>test01') def test02(self): print('Test01>>>test02') class Test02(): #不写继承的类,则默认继承python的基类(object),即class Test02()与class Test02(object)一致 def test01(self): print('Test02>>>test01') def test03(self): print('Test02>>>test03') class Test03(Test02,Test01): #根据继承的顺序来优先调用,即Test02在前,调用时优先调用Test02的方法 def test04(self): print('Test02>>>test04') if __name__ == '__main__': a=Test03() a.test01()
6.2、封装
1、概念:实现细节不会暴露出来,只告诉你一个接口,使用这个接口就能实现操作
2、调用接口就是封装
6.3、多态
1、概念:同名方法在不同类中,调用时只需要传递对应的类实例,就能实现调用不同的方法
2、一个方法多种实现
七、动态设置属性
7.1、获取对象所有属性
1、可以获取类和类实例的属性:类/类实例.__dict__
class Test01: color='黑色' def __init__(self,name,age): self.name=name self.age=age if __name__ == '__main__': cl=Test01('老王',20) print(cl.__dict__) #获取类实例的所有属性 print(Test01.__dict__) #获取类的所有属性
7.2、设置属性
1、设置属性:setattr(x, y, v)
1)第一个参数:对象(类、类实例)
2)第二个参数:属性名称
3)第三个参数:属性的值,若属性名称存在,则修改属性的值,若不存在,则添加
class Test01: color='黑色' def __init__(self,name,age): self.name=name self.age=age if __name__ == '__main__': cl=Test01('老王',20) setattr(cl,'name','男') #设置实例属性,若属性存在则修改,若不存在则添加属性 print(cl.__dict__) setattr(Test01,'sex','男') #设置类属性,若属性存在则修改,若不存在则添加属性 print(Test01.__dict__)
2、获取属性:getattr(x, y, v)
1)第一个参数:对象(类、类实例)
2)第二个参数:属性名称
3)第三个参数:默认值,若属性存在,则返回属性的值,若属性不存在,会返回默认值,不会新增
class Test01: color='黑色' def __init__(self,name,age): self.name=name self.age=age if __name__ == '__main__': cl=Test01('老王',20) print(getattr(cl,'name123','no attribute')) #获取实例属性,若属性存在,则返回属性的值,若属性不存在,则返回no attribute,可以随便填 print(getattr(cl,'name','男')) print(getattr(Test01, 'color', '男')) #获取类属性,若属性存在,则返回属性的值,若属性不存在,则返回默认值
3、判断属性:hasattr(x,y)
1)第一个参数:对象(类、类实例)
2)第二个参数:属性名称
3)返回:属性存在,则返回True,属性不存在,则返回False
class Test01: color='黑色' def __init__(self,name,age): self.name=name self.age=age if __name__ == '__main__': cl=Test01('老王',20) print(hasattr(cl,'test')) #判断实例属性是否存在,若存在返回True,若不存在,返回False print(hasattr(Test01, 'color')) #判断类属性是否存在,若存在返回True,若不存在,返回False
4、删除属性:delattr(x,y)
1)第一个参数:对象(类、类实例)
2)第二个参数:需要删除的属性名称
class Test01: color='黑色' def __init__(self,name,age): self.name=name self.age=age if __name__ == '__main__': cl=Test01('老王',20) delattr(cl,'name') #删除实例属性 print(cl.__dict__) delattr(Test01, 'color') #删除类属性 print(Test01.__dict__)
这篇关于学习python入门基础——类和对象的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-26Python基础编程
- 2024-11-25Python编程基础:变量与类型
- 2024-11-25Python编程基础与实践
- 2024-11-24Python编程基础详解
- 2024-11-21Python编程基础教程
- 2024-11-20Python编程基础与实践
- 2024-11-20Python编程基础与高级应用
- 2024-11-19Python 基础编程教程
- 2024-11-19Python基础入门教程
- 2024-11-17在FastAPI项目中添加一个生产级别的数据库——本地环境搭建指南