Python面向对象:一篇文章掌握面向对象的基础(1)

面向过程:就是我们一开始学习的,按照解决问题的步骤去写代码

二、类和对象的概念

====================================================================

是具有一组相同或者相似特征(属性)和行为(方法)的一系列对象。对象是类的具体示例。

比如手机是一个类,华为,苹果,小米是对象(实例),有屏幕尺寸、处理器、分辨率等属性,开机、关机、拍照等行为(方法)。

类的定义


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)
  • 22
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值