python 面向对象知识点汇总

亲爱的读者们,今天我们要讨论,python面向对象的三大要素 python面向对象的基本特征,一起探索吧!

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Python神经网络CSDN神经网络CSDN》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友汉语AGI

既有适合神经网络CSDN学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Python知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,神经网络CSDN包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添神经网络CSDN获取:vip1024c (备注Python)

正文

输出结果:

3. 特殊方法

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

在类中可以定义一些形如__xxx__的方法,称为特殊方法,也称魔术方法。特殊方法不需要我们调用,会在特定的时候自动调用。

掌握下边这种定义类写法,方可实现在创建类的实例对象的时候直接传入属性。

class Person():

name = ‘张三’

age = 18

identity = ‘学生’

特殊方法 init,类的对象被创建时, __init__就会被调用

def init(self, name, age, identity):

= name

= age

self.identity = identity

print(‘hello’) # 实例对象一被创建,"hello"就被输出。

这样写,再创建类的对象的时候,name和age都将成为必传参数。缺少则 __init__会无法运行,导致报错。

这里不能用不定长参数,那样没有任何意义。

def speak(self): # self就等于任何调用我这个方法的对象本身

print(‘你好,我是{},{}岁的{}’.format(, , self.identity))

p1 = Person(“马保国”, 65,“老同志”)

p1.speak()

4.封装

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

4.1封装,私有属性,隐藏属性

封装是面向对象三大特征之一。我们需要一种方式来增强数据的安全性,这种方式就是封装。

封装是指隐藏对象中一些不希望被外部访问到的属性或方法。具体方式为,在属性名前加入一个下划线,表示不可直接访问,但仍可手动访问,只是提醒不可修改;在属性名前加两个下划线表示隐藏属性。

示例:

class Person():

def init(self, name, age, identity):

= name

self._age = age

self.__identity = identity

这样写,再创建类的对象的时候,name和age都将成为必传参数。缺少则 __init__会无法运行,导致报错。 # 这里不能用不定长参数,那样没有任何意义。

def speak(self): # self就等于任何调用我这个方法的对象本身

print(‘你好,我是{},{}岁的{}’.format(, self._age, self.__identity))

p1 = Person(“马保国”, 65,“老同志”)

print()

print()

print(p1.identity)

运行结果如下:

我们可以看到,name依然可以直接访问,但是前边加了一个下划线的age和加了两个下划线的identity属性已经不能直接访问了。

对于前边加了一个下划线的属性age,我们使用p1._age的方式依然可以访问age属性的。

但是对于前边加了两个下划线的属性identity,我们却不能再使用p1.__identity来访问了。否则会有如下报错。

但是对于这样的属性,并不是没有办法访问。

我们可以使用固定语法:_类名__属性名 的形式进行访问。

如 p1._Person__identity

(类名前加一个下划线,类名与属性名之间加了两个下划线)

即:

这样就访问成功了。

该如何解释这一系列情况呢?

可以这样来理解。

一般情况下,加_的都是私有属性。没有特殊情况下不要修改私有属性。封装就是这样保障数据安全的。这种”不要修改“是一种约定俗成,不意味着不能修改,只是对编程者的一种提醒。毕竟所有的属性,只要你想修改,都还是受人为控制的。

加一个_后,只是相当于传入属性值后,把原先的属性名前加了一个下划线,故可以通过“_属性名”的形式访问。

而对于加了__(两个下划线)的隐藏属性,本质上只不过是Python自动为属性改了一个名字,即 _类名__属性名 。这样我们就常常把它描述为“私有属性不能通过对象来获取,只能在类的内部访问。” (一句常见的概述)但是,上边的例子我们也看到了,使用p1._Person_identity的方式确实可以说是通过对象访问到了属性值。但是这句话本身是没有问题的,之所以这么说,就是我们对于封装这一概念的一种认同与使用,我们约定俗成不乱操作封装过的属性值,以保障数据安全,我们只是不再可以通过原来的对象名字来获取该对象了。

协定开发我们一般使用私有属性(一个下划线),而一般不用隐藏属性。

4.2 getter()与setter()

我们也可以给类提供上getter()和setter()方法

getter() 用于获取对象中指定的属性

setter() 用于设置对象中的属性

示例如下:

class Person():

def init(self, name, age, identity):

= name

self.__age = age

self._identity = identity

getter方法 提供给你访问这个属性的方法 # 协定开发一般用 私有属性

def get_identity(self):

return self._identity

setter方法 提供给你修改这个属性的方法

def set_identity(self, identity):

self._identity = identity

def speak(self):

print(‘你好,我是{},{}岁的{}’.format(, self.__age, self._identity))

逐句输入下边代码,观察结果,以感受其用法逻辑。

p1 = Person(“马保国”, 65,“老同志”)

p1.get_identity()

p1.speak()

p1.set_identity(‘武林高手’)

p1.get_identity()

p1.speak()

结果展示如下:

增加getter()和setter()方法,可以很好地控制属性是否是只读的。

5. property装饰器

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

我们可以用@property装饰器来创建只读属性,@property装饰器会将方法转换为相同名称的只读属性,可以与所定义的属性配合使用,这样可以防止属性被修改。

具体示例如下:

class Person():

这里,name属性是私有属性,不可读也不可改

def init(self, name):

self._name = name

getter方法 提供给你访问这个属性的方法

@property

def name(self):

return self._name

这样,name属性就转为了只读,不可改。可以通过相同名称的方法:name来查看name属性。

如果想再把不可改的属性改为可改属性,则:

setter方法 提供给你修改这个属性的方法

@name.setter

def name(self, name):

self._name = name

下边 逐句进行测试

p1 = Person(‘马保国’)

print() # 可以通过 读取name属性了。

= ‘蔡徐坤’ # 可以这样修改p1的name属性了。

print() # name属性已被更改

6. 继承

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

6.1 继承概述 与 object类

继承也是面向对象的三大特征之一,通过继承我们可以使一个类获取到其他类中的属性和方法。

在定义类的时候,可以在类名后边的括号中指定当前类的父类

继承提高了类的复用性,让类与类之间有了关系,有了这个关系,才有了多态的特性。

定义一个父类

class Person(object):

def init(self, name):

= name

定义一个子类

class boy(Person):

def speak(self):

print(‘He has a dream.’)

这就实现了一个简单的类的继承。

issubclass()方法 用于检测一个类是否是一个类的父类

print(issubclass(boy, Person)) # True

print(issubclass(Person, object)) # True

对于父类,或者说是不继承其他类的独立的类,定义的时候我们约定俗成继承object这个类,object类中有很多高级特性可以使用。不过即使不传入object也没有关系,我们创建类的时候python3已经默认帮我们传入了object。object类是所有类中最大的父类。

对于子类,则必须要在其括号中填入要继承的父类。

6.2 方法重写

方法重写要建立在继承的基础之上。

如果在子类中有和父类同名的方法,则通过子类实例对象区调用方法时,会调用的是子类的方法,而不是父类的方法,这个特点我们称之为方法的重写(覆盖)。

当我们调用一个对象的方法时,会优先在当前对象的类中寻找,有则直接调用,没有则去当前对象的类的父类中寻找,有则调用,没有则继续往上边的父类中寻找,以此类推。直到找到object类,如果还没有就报错了。

可以通过这段示例代码来体会其逻辑:

class A(object):

name = ‘A’

def test(self):

print(‘A…’)

class B(A):

def test(self):

print(‘B,…’)

class C(B):

pass

c = C()

逐句测试

c.test()

print(c.name)

6.3 super()方法

super这个方法的使用时建立在两个基础之上的

必须要有父类的继承

必须要有方法的重写

super()方法可以获取到当前类的父类的方法。且通过super()方法返回对象调用父类方法时,不需要调用self。

class A(): # 默认继承object

def test(self):

print(‘A…’)

class B(A):

def test(self):

print(‘B,…’)

super的作用: 将被覆盖了的父类方法,重新调用

def test2(self):

super().test()

进行逐行测试

b = B()

b.test()

b.test2()

结果如下:

这样,就既能使用子类中的test方法,也能调用父类中的test方法了。

6.4 多重继承

python是支持多重继承的,也就是说我们可以为一个类同时指定多个父类。只要在子类后边的括号里添加多个类即可实现多重继承。

多重继承可以使子类同时拥有多个父类,并且会获取到所有父类中的方法,如果遇到调用父类中的同名方法,则按照括号内传入的顺序,会先在第一个父类中寻找,然后是第二个,第三个…以此类推,前边的会覆盖后便的。

在开发者如果没有特殊要求,应尽量避免使用多重继承。多重继承会使得我们的代码更加复杂。

简要写法示例:

class A():

def test(self):

print(‘A…’)

class B():

def test(self):

print(‘B…’)

class C(A, B): # 这样就实现了C类对A类和B类的多重继承。

def speak(self):

print(‘A和B都是我爹。’)

调用test方法的话,按先后顺序会调用A中的,B中的test()方法会被覆盖。

c = C()

c.test()

输出结果:

7. 多态

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

多态是面向对象三大特性之一。从字面来理解,就是指多种形态。

python中多态的特点:

python中的多态只关心对象的实例方法是否同名,不关心对象所属的类型。

对象所属的类之间,继承关系也是可有可无的。

多态可以增加代码外部调用的灵活度,让代码更通用,兼容性比较强。

多态是调用方法的技巧,不会影响到类的内部设计。

代码示例如下:

class A():

def test(self):

print(‘A…’)

class B():

def test(self):

print(‘B…’)

class C():

def test(self):

print(‘C…’)

def test(obj):

()

a = A()

b = B()

c = C()

a.test()

b.test()

c.test()

8. 属性和方法

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

8.1 属性

类属性: 直接在类中定义的属性是类属性。

类属性可以通过类或类的实例访问到,但是类属性只能通过类对象来修改,无法通过实例对象修改。

实例属性: 通过示例对象添加的属性属于实例属性。

实例属性只能通过实例对象来访问和修改,类对象无法访问修改。

示例:

class A():

num = 0 # 这个属性就是类属性,无法通过实例对象更改

def init(self, name):

= name # 这个属性即是实例属性

print(self)

8.2 方法:

8.2.1 实例方法

在类的定义中,以self为第一个参数的方法都是实例方法,实例方法调用的时候,python会将调用对象以self传入。

实例方法可以通过实例和类去调用。

当通过实例调用时,会自动将当前调用对象以self传入。

当通过类调用时,不会自动传递self,我们必须手动传递self。

8.2.2 类方法

类方法 在类的内容中,以 @classmethod 来修饰的方法就是类方法,类方法的第一个参数是cls,即当前类对象,会被自动传递(这一点类似self)。即可以说:第一个参数是cls的方法是类方法。这也是类方法与实例方法的不同之处。

类方法可以通过类去调用,也可以通过实例调用。

示例:

做了那么多年开发,自学了很多门编程语言,我很明白学习资源对于学一门新语言的重要性,这些年也收藏了不少的Python干货,对我来说这些东西确实已经用不到了,但对于准备自学Python的人来说,或许它就是一个宝藏,可以给你省去很多的时间和精力。

别在网上瞎学了,我最近也做了一些资源的更新,只要你是我的粉丝,这期神经网络CSDN你都可拿走。

我先来介绍一下这些东西怎么用,文末抱走。

(1)Python所有方向的学习路线(新版)

这是我花了几天的时间去把Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

最近我才对这些路线做了一下新的更新,知识体系更全面了。

(2)Python学习视频

包含了Python入门、爬虫、数据分析和web开发的学习视频,总共100多个,虽然没有那么全面,但是对于入门来说是没问题的,学完这些之后,你可以按照我上面的学习路线去网上找其他的知识资源进行进阶。

(3)100多个练手项目

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了,只是里面的项目比较多,水平也是参差不齐,大家可以挑自己能做的项目去练练。

(4)200多本电子书

这些年我也收藏了很多电子书,大概200多本,有时候带实体书不方便的话,我就会去打开电子书看看,书籍可不一定比视频教程差,尤其是权威的技术书籍。

基本上主流的和经典的都有,这里我就不放图了,版权问题,个人看看是没有问题的。

(5)Python知识点汇总

知识点汇总有点像学习路线,但与学习路线不同的点就在于,知识点汇总更为细致,里面包含了对具体知识点的简单说明,而我们的学习路线则更为抽象和简单,只是为了方便大家只是某个领域你应该学习哪些技术栈。

(6)其他资料

还有其他的一些东西,比如说我自己出的Python入门图文类教程,没有电脑的时候用手机也可以学习知识,学会了理论之后再去敲代码实践验证,还有Python中文版的库资料、MySQL和HTML标签大全等等,这些都是可以送给粉丝们的东西。

这些都不是什么非常值钱的东西,但对于没有资源或者资源不是很好的学习者来说确实很不错,你要是用得到的话都可以直接抱走,关注过我的人都知道,这些都是可以拿到的。

网上神经网络CSDN一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添神经网络CSDN获取:vip1024c (备注python)

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长! 就会去打开电子书看看,书籍可不一定比视频教程差,尤其是权威的技术书籍。

基本上主流的和经典的都有,这里我就不放图了,版权问题,个人看看是没有问题的。

(5)Python知识点汇总

知识点汇总有点像学习路线,但与学习路线不同的点就在于,知识点汇总更为细致,里面包含了对具体知识点的简单说明,而我们的学习路线则更为抽象和简单,只是为了方便大家只是某个领域你应该学习哪些技术栈。

(6)其他资料

还有其他的一些东西,比如说我自己出的Python入门图文类教程,没有电脑的时候用手机也可以学习知识,学会了理论之后再去敲代码实践验证,还有Python中文版的库资料、MySQL和HTML标签大全等等,这些都是可以送给粉丝们的东西。

这些都不是什么非常值钱的东西,但对于没有资源或者资源不是很好的学习者来说确实很不错,你要是用得到的话都可以直接抱走,关注过我的人都知道,这些都是可以拿到的。

网上神经网络CSDN一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添神经网络CSDN获取:vip1024c (备注python) [外链图片转存中…(img-BRnkKYse-呵呵85)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!


原文地址1:https://blog.csdn.net/2401_84140687/article/details/137897581
参考资料:python中用turtle画一个圆形 https://blog.csdn.net/SXIAOYAN_/article/details/140061099

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值