python之面向对象

本文探讨了Python的面向对象编程,包括面向对象的由来、类的定义与对象创建、类属性与方法、特殊方法如__del__和__call__,以及封装、继承和多态的概念。通过实例解析了面向对象的实现和内存管理,并解答了关于方法重载和动态性的疑问。
摘要由CSDN通过智能技术生成

前置疑问

Q1 面向对象和面向过程有什么区别?两者之间有什么联系?
Q2 怎么才算是面向对象呢?
Q3 我该如何实现面向对象呢?
Q4 创建类对象和实列对象的内存分析是什么样子的?
Q5 面向对象有三大特性:封装、继承、多态。如何实现这三大特性?


学习内容

1、面向对象和面向过程的区别
2、类的定义,__init__和__new__方法
3、实例属性和实例方法
4、类对象、类方法、类属性
5、__del__自动删除没有没引用的对象,__call__实例对象可以像调用函数一样使用


学习时突发疑问

Q6 实例可以调用类的方法吗?实列对象怎么能调用类方法的?
Q7 为什么python中方法不能重载


学习产出

1、面向对象的由来

A1
面对一个复杂问题,比如造车,一步一步来,不能保证每个步骤的正确性和衔接问题。应该先分析一个车的构成,由车胎、车架、引擎、系统等组成而来。而在分析这个过程中,对象就产生了,即这些车胎、车架、引擎,系统这些名词。我们知道了对象,然后具体一步一步生成这个对象,这个实现的过程就是一个过程,对象全部生成了,最后组装,一辆车就造成了。
一句话:面向对象宏观分析问题,面向过程微观具体实现。

2、面向对象的具体实现

A2和A3

2.1 简单定义一个类并生成对象
class Student:
    def __init__(self,name,score):
        self.name = name
        self.score = score

    def say_score(self):  
        print("{0}的分数是:{1}".format(self.name, self.score))

s1 = Student("xiaoming", 80)

s1.say_score()

s1.age = 24 

s1.salary = 20000

print(s1.salary)
print(s1.age)



print(dir(s1))

print(s1.__dict__)

print(isinstance(s1,Student))

查看这段代码知道一下信息:

  1. 创建对象之前需要一个类。

创建类的格式:

class 类名:
	类体
类名满足:驼峰原则

这段代码中类体有这几个部分组成:

  • 构造方法__init__

构造方法__init__初始化对象,方法的第一个参数是传入对象本身的地址,参数名习惯用self表示,且第一个参数必须是这个。name和score 表示初始化对象时,赋予的值。self.name = name 和 self.score = score是实例属性。系统中默认有__init__方法,如果我们定义了__init__方法,则系统就不创建了。

  • say_score
    该方法属于实例方法
  1. 我们根据这个类去生成一个类的实例,这个实例就是对象。
    生成对象的语句 :s1 = Student(“xiaoming”, 80) 。s1就是对象,这个对象里面有name,score属性和say_score方法。也可以给这个对象加属性 s1.age = 24 为s1这个对象新增加属性age。系统中默认有__new__方法创建新的对象,因此不用写

  2. 运行结果
    在这里插入图片描述
    完整显示内容

xiaoming的分数是:80
20000
24
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'age', 'name', 'salary', 'say_score', 'score']
{'name': 'xiaoming', 'score': 80, 'age': 24, 'salary': 20000}
True

A4
4. 底层内存解析图
在这里插入图片描述
在这里插入图片描述
图片由python tutor生成

A6

3 类属性、类方法、类对象

class Student:

    #类属性
    school = "TsingHua"
    count = 0


    @classmethod
    def print_schname(cls):
        print("学校名字:", Student.school)

    def __init__(self,name, age, id):
        '''初始化实例对象'''
        self.name = name
        self.age = age
        self.id = id
        Student.count = Student.count + 1

    def say_id(self):
        print("{0}的学校是:{1}".format(self.name, Student.school))
        print("{0}的学号是:{1}".format(self.name
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值