python之面向对象大全(一)

面向对象编程

  • 面向对象的思想主要是针对大型软件设计而来的
  • 面向对象将数据和操作数据相关方法封装到对象中,更接近人的思维,提高编程效率
  • 面向对象基本功能:继承 多态 封装
  • python中,一切皆对象,函数,类等都是对象

1. 面向对象和面向过程的区别

1.1 面向过程思维
  • 关注的是"程序的逻辑流程",是一种执行者思维
  • 考虑问题"怎么按步骤实现"
  • 适合简单,不需要协作事务
1.2 面向对象思维
  • 面向对象关注"软件中对象的关系",是一种设计者思维
  • 思考的是"怎么设计这个事务"
  • 宏观上,整体把握系统,但是,具体到
class Student:

    company = 'SXT'
    count = 0
    def __init__(self,name,score):
        self.name = name
        self.score = score
        Student.count = Student.count+1
    def say_score(self):
        print('我的公司是:',Student.company)
        print(self.name, '的分数是:', self.score)

s1 = Student('zs',90)
s1.say_score()

2. 构造函数__init__()

构造方法用于执行"实例对象的初始化工作",即对象创建后,初始化当前对象的相关属性,无返回值

  • python对象包含以下部分:id type value(属性 方法)
  • init()方法:初始化创建好的对象,初始化是指:给实例属性赋值
  • __new__方法:用于创建对象,但我们一般无需重定义该方法

3. 实例属性

实例属性是从属于实例对象的属性,也称"实例变量"

  1. 实例属性一般在__init__()方法中定义:
  2. 在本类的其他实例方法中,也是通过self进行访问
  3. 创建实例对象后,通过实例对象进行访问
    eg:obj01 = 类名()
    obj01.实例属性名 = 值 #可以给已有属性赋值,也可以新加属性

4. 实例方法

实例方法是从属于实例对象的,方法定义方法:
def 方法名(self,[形式参数])
函数体
方法调用格式:
对象.方法名(实参)
要点:

  1. 指定实例方法时,第一个参数必须是self
  2. 调用实例方法时,不需要给self传参数
    函数个方法的区别:
  3. 都是用来完成一个功能的语句块,本质一样
  4. 方法调用时,通过对象来调用,方法属于特定实例对象,普通函数没有这个特点
  5. 直观上看,方法定义时要传self
    在这里插入图片描述
    其他操作:
  6. dir(obj)可以 获得对象的所有属性, 方法
  7. obj.dict 对象的属性字典
  8. pass空语句
  9. isinstance (对象,类型) 判断"对象"是不是"指定类型"
class Student:

    company = 'SXT'
    count = 0
    def __init__(self,name,score):
        self.name = name
        self.score = score
        Student.count = Student.count+1
    def say_score(self):
        print('我的公司是:',Student.company)
        print(self.name, '的分数是:', self.score)

s1 = Student('zs', 90)
s2 = Student('ls', 18)
s1.say_score()
print(dir(s1))
print(s1.__dict__)
print(isinstance(s2,Student))

5. 类对象

当解释器执行class语句时,就会创建一个类对象

class Student:
    pass
print(type(Student))
print(id(Student))
Stu2 = Student
s1 = Stu2()
print(id(Stu2))
print(s1)

6. 类属性和类方法

6.1 类属性

类属性是从属"类对象"的属性,类属性从属于类对象,可以被所有势力对象共享
方式:
class 类名:
类变量名 = 初始值
在类中或类外,通过:类名.类变量名来读写

class Student:

    company = 'SXT'
    count = 0
    def __init__(self,name,score):
        self.name = name
        self.score = score
        Student.count = Student.count+1
    def say_score(self):
        print('我的公司是:',Student.company)
        print(self.name, '的分数是:', self.score)
#
s1 = Student('zs', 90)

s1.say_score()
print("一共创建{0}个Student对象".format(Student.count))

注:类在内存中运行过程:

在这里插入图片描述

6.2 类方法

类方法是从属于"类对象"的方法,类方法通过@classmethond来定义
要点:
- @classmethod位于方法上面一行
- 第一个必须有cls:指的是类对象本身
- 类方法中访问实例实行和实例方法会报错
- 子类集成父类方法时,传入cls是子类对象,而非父类对象

class Student:
    company = 'ABC'
    @classmethod
    def printCompany(cls):
        print(cls.company)
Student.printCompany()  #-- 通过类名调用
6.3 静态方法

python中允许定义与类对象无关的方法,成为"静态方法"
通过@staticmethond来定义

class Student2:
    company = 'ABC'
    @staticmethod
    def add(a, b):
        print("{0}+{1}={2}".format(a, b, (a+b)))
        return
Student2.add(20,30)

7. __del__方法(析构函数)和垃圾回收机制

  • __del__方法为’析构方法’,用于实现对象被销毁时所需的操作,比如释放内存空间
  • python实现自动垃圾回收,当对象没有被引用是,有垃圾回收器调用__del__方法
class Person:
    def __del__(self):
        print("销毁对象:{0}".format(self))
p1 = Person()
p2 = Person()
del p2
print("程序结束")

8. __call__方法和可调用对象

称为"可调用对象",级该对象可以像函数一样被调用

class SalaryAccount:
    def __call__(self, salary):
        print("发工资了...")
        yearSalary = salary * 12

        return dict(yearSalary=yearSalary)


s = SalaryAccount()
print(s(3000))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值