面向过程:就是我们一开始学习的,按照解决问题的步骤去写代码
====================================================================
类是具有一组相同或者相似特征(属性)和行为(方法)的一系列对象。对象是类的具体示例。
比如手机是一个类,华为,苹果,小米是对象(实例),有屏幕尺寸、处理器、分辨率等属性,开机、关机、拍照等行为(方法)。
类的定义
class 类名(object):
属性...
方法...
class Person(object): # (object)可省略
name = ''
age = 0
def eat(self):
print('Person类执行eat函数')
pass
创建对象
对象名 = 类名()
LiMing = Person()
LiMing.name = 'LiMing'
LiMing.age = 19
print('Liming name:',LiMing.name)
print('Liming age: ',LiMing.age)
LiMing.eat()
'''
Liming name: LiMing
Liming age: 19
Person类执行eat函数
'''
===================================================================
普通(公开)属性
普通属性可以在类的外部直接访问
class A:
name = 'ssd'
age = 12
a1 = A()
print(a1.name,a1.age)
'''
ssd 12
'''
实例属性
实例化时才有的属性(使用__init__方法定义),因此通过类访问实例属性会报错找不到
class Animal:
name = 'default' # 类属性
def __init__(self,color):
#实例化时调用__init__,故color为实例属性
self.color = color
return
pass
dog1 = Animal('pink') #实例对象
print(dog1.name,dog1.color) # 实例对象访问类属性个实例属性
print(Animal.name)
# 类属性访问类属性
print(Animal.color)
# 类属性访问实例属性,报错,找不到实例属性,因为不进行实例化就不执行__init__就没有color属性
私有化属性
-
将属性定义为私有属性,不能在类的外部直接访问和修改,
-
同时其子类也不能继承该属性
-
可以防止被随意修改或意外修改
语法:
class A:
name = 'asd' #普通属性
__age = 16 #私有化属性,在变量前面加双下划线
若此时创建一个A类的对象,直接访问age变量,会报错显示找不到
a1 = A()
print(a1.__age)
因此要在要访问私有属性就要从类的内部,即使用类的实例化方法
class A:
name = 'asd' #普通属性
__age = 16 #私有化属性,在变量前面加双下划线
def getAge(self):
return self.__age
a2 = A()
print(a2.getAge()) # 调用类中的实例方法来访问私有属性
被保护的属性
-
将属性定义为被保护的属性,不能在类的外部直接访问和修改,
-
其子类可以继承该属性
-
可以防止被随意修改或意外修改
语法:
- List item
class A:
_name = 'asf' # 在变量前加单下划线
===================================================================
实例方法
实例化对象后可以使用的方法,默认参数为self,指代本身
class A:
name = 'sdf'
def PrintName(self):
print(self.name)
return
a1 = A()
a1.PrintName()
类方法
用@classmethod 修饰,默认参数为cls,表示该类,
-
不需要实例化对象就能使用
-
可以用来修改类属性
-
每一个类方法上面都要添加一行@classmethod修饰
-
实例对象也可以调用
class Student:
country = 'China'
age = 19
@classmethod
def getCountry(cls):
return cls.country # 访问类属性
@classmethod
def getAge(cls):
return cls.age
xm = Student()
print(Student.getAge(),Student.getCountry())
print(xm.getAge())
'''
19 China
19
'''
静态方法
用@staticmethod修饰,默认没有参数
-
由于静态方法主要存放逻辑性代码,本身与类和对象没有交互.
-
使用静态方法可以节省内存资源,比如显示当前时间
-
实例对象也可以调用
import time # 导入Time模板
class T:
def showTimeNow():
# 功能独立,与类和对象无关
return time.strftime('%H:%M:%S',time.localtime())
t1 = T()
print(T.showTimeNow())
print(t1.showTimeNow())
私有化方法
-
不能在类的外部直接调用
-
同时其子类也不能继承该属性
语法:在方法前加__
def __func(self):
return
保护的方法
-
不能在类的外部直接调用
-
其子类可以继承该属性
语法:在方法前加_
def _func(self):
return
=================================================================
在Python中,有一些内置好的特定方法在特定的操作时会被调用,这些方法称之为魔术方法。常用的魔术方法有:__ new __ 、__ init __ 、__ str __ 、__ del __
1、__ new __ 创建对象实例
创建对象实例,每调用一次就会生成一个新的对象,可以不定义。
-
cls是class的缩写,代表类名
-
需要返回对象类型object.__ new __(cls)才能创建成功(object. __ new __(cls)可以理解为object是一个空对象,在该对象使用 __ new __方法表明这个对象时cls类的,然后用return返回)
-
可以控制创建对象的一些属性限定,经常用来做单例模式的时候使用
class A:
def __new__(cls, *args, **kwargs):
print('执行__new__()')
return object.__new__(cls) #返回创建的实例化对象
2、__ init __实例对象初始化
-
init可以带参数,并在创建对象时进行赋值
-
初始化方法创建实例对象时自动执行
ObjectName = ClassName(参数1,参数2,...)
class Person:
def __init__(self,Name):
self.name = Name
return
def eat(self): # 实例方法eat()
print("吃饭")
return
xm = Person('aaw')
xm.age = 12 # 追加实例属性,在类中可以不用定义
print(xm.name,xm.age)
'''
aaw 12
'''
3、__ str __ 打印对象的属性
返回字符串,打印对象时即打印返回的字符串,一般用于查看对象的属性
class A:
def __init__(self):
self.name = 'ssd'
self.age = 23
return
def __str__(self):
return 'Name:%s Age :%d'%(self.name,self.age)
a1 = A()
print(a1)
'''
Name:ssd Age :23
'''
4、__ del __ 释放对象
-
析构方法,释放类,在程序运行结束时自动调用
-
当对象被手动销毁(del 对象名)时也会自动调用__del__
-
析构函数一般用于资源回收,利用该方法销毁对象回收内存等资源
class A:
def __init__(self):
self.name = 'ssd'
self.age = 23
return
def __str__(self):
return 'Name:%s Age :%d'%(self.name,self.age)
def __del__(self):
print('释放')
return
a1 = A()
print(a1)
'''
Name:ssd Age :23
释放
'''
===============================================================
单继承
子类继承父类,子类中包含父类所有的属性和方法,而父类不一定有子类中的属性和方法。
父类就是将不同类的共同属性和方法封装在一个类中,然后这些不同的类都继承父类即可使用共同的属性和方法,提高开发效率
class Animal:
def eat(self):
print("Animal Eat")
return
def drink(self):
print("Animal Drink")
return
class Cat(Animal): # 继承Animal类
def shout(self):
print('喵~喵~')
return
class Dog(Animal): # 继承Animal类
def shout(self):
print("汪!汪!")
return
cat1 = Cat()
dog1 = Dog()
cat1.eat()
cat1.shout()
dog1.drink()
dog1.shout()
'''
Animal Eat
喵~喵~
Animal Drink
汪!汪!
'''
多继承
一个子类也可以继承多个父类,同时 拥有多个父类所有的属性和方法
class A:
a1 = 'A类的属性a1'
def func(self):
print(self.a1)
print('执行A类的方法funcA')
return
pass
class B:
b1 = 'B类的属性b1'
def func(self):
print(self.b1)
print('执行B类的方法funcB')
return
pass
class C(A,B): # 多继承,继承A,B类
def funcC(self):
self.func()
self.func()
return
pass
cc = C()
cc.funcC()
如果同级父类有相同的方法,子类执行方法则根据继承的顺序优先选择。如果是不同级父类则优先会执行距离子类级数最少的类的方法(往上一级一级查找父类)(这里也算子类重写父类方法,子类的方法覆盖了父类的方法)
调用父类方法
语法:
父类类名.父类方法名()
super().父类方法名()# 自动找到父类并调用
如果继承多个父类,按照继承顺序去调用
重写父类方法
父类的方法不满足子类的需要,要去完善方法。
class A:
def Print(self):
print('执行A类的Print方法')
return
class B(A):
def Print(self):
print('执行B类的Print方法')
return
b1 = B()
b1.Print()
'''
执行B类的Print方法
'''
**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**
**深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**
**因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**
![img](https://img-blog.csdnimg.cn/img_convert/c007e8dee7092f4d32ef20808f04d697.png)
![img](https://img-blog.csdnimg.cn/img_convert/98b89cd084ac2cd1f69377e35f36ebe7.png)
![img](https://img-blog.csdnimg.cn/img_convert/3f7a7ea3dd340415535f81074983b9bb.png)
![img](https://img-blog.csdnimg.cn/img_convert/2983f21385df9c757c9abd71d81a8b1a.png)
![img](https://img-blog.csdnimg.cn/img_convert/6c361282296f86381401c05e862fe4e9.png)
![img](https://img-blog.csdnimg.cn/img_convert/9f49b566129f47b8a67243c1008edf79.png)
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!**
**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**
**如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注:Python)**
lass B(A):
def Print(self):
print('执行B类的Print方法')
return
b1 = B()
b1.Print()
'''
执行B类的Print方法
'''
**自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。**
**深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!**
**因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。**
[外链图片转存中...(img-kYn8ZR4U-1713694552265)]
[外链图片转存中...(img-JjBp5jIA-1713694552266)]
[外链图片转存中...(img-B43AAExq-1713694552267)]
[外链图片转存中...(img-7kaE7T47-1713694552267)]
![img](https://img-blog.csdnimg.cn/img_convert/6c361282296f86381401c05e862fe4e9.png)
![img](https://img-blog.csdnimg.cn/img_convert/9f49b566129f47b8a67243c1008edf79.png)
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!**
**由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新**
**如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注:Python)**
![](https://img-blog.csdnimg.cn/img_convert/67c0ed93fcf662e1cf2f26461ecc9445.jpeg)