面向对象编程并类与对象的概念

1、面向过程编程

     核心是过程二字,过程是解决问题的步骤,即先做什么再做什么。

    基于该思想编写程序好像就是在编写一条流水线,是一种机械式的思维方式。

    优点:复杂 的问题流程化,进而简单代

    缺点:可扩展性差。

  2、面向对象   

    核心“对象”二字,对象指的是特征与技能的结合体 。

    基于该思想编写程序就好比在创造一个世界,你就是这个世界的上帝,是一种上帝式的思维方式。

    优点:可扩展性强

    缺点:它编程的复杂性高于面向过程。

面向对象的思想只是提高了程序的扩展性,不是程序设计的全部。对于一个软件质量来说,它还涉及到许多的方面(如发性能,成本,可靠性,安全性,可维护性等)

3、类于对象

    1)类:对象与特征与技能的结合体,那类就是一系列对象相同的特征与技能的结合体。

    2)在现实世界中:一定先有对象,后来随着人类文明的发展总结出类的概念,对象是具体的存在的,而类只是一种抽象概念。

        在程序中:务必保证,先定义类,后调用类来产生对象。(与函数有点相似)

"""
现实生活中的对象:
对象1
    特征:
school='Oldboy'
name='monicx'
age=23
sex='male'
    技能
        学习
        选课
对象2:
    特征:
school='Oldboy'
name='小田'
age=23
sex='male'
    技能
        学习
        选课
现实生活中的老男孩学生类:
   相同的特征:
        school='Oldboy'
   相同的技能:
"""
#程序中的类(变量与函数的集全体)
class OldboyStudent:
    #用变量表示特征
    school='Oldboy'
    #用函数表示技能
    def learn(self):
        print('is learning')
    def choose(self):
        print('choose course....')

    # print('=============')

#注意:在定义类的阶段就会立刻执行类体代码。产生类的名称空间存入类体代码产生的名字。
#名称空间是字典的形式存放。
# print(OldboyStudent.__dict__)
'''
{'__module__': '__main__', 'school': 'Oldboy',
'learn': <function OldboyStudent.learn at 0x00000000021C9950>,
 'choose': <function OldboyStudent.choose at 0x00000000021C99D8>,
  '__dict__': <attribute '__dict__' of 'OldboyStudent' objects>,
   '__weakref__': <attribute '__weakref__' of 'OldboyStudent' objects>,
    '__doc__': None}

'''
# OldboyStudent.__dict__['learn'](123)
print(OldboyStudent.school)#OldboyStudent.__dict__['school']
print(OldboyStudent.learn)
print(OldboyStudent.learn(123))
#‘.’之后的都叫统一属性
OldboyStudent.country='China'#新增一个属性
OldboyStudent.school='博爱'#修改一个属性
print(OldboyStudent.__dict__)

调用类的返回值就是对象。obj=OldboyStudent()

调用类发生了哪些事:

class OldboyStudent:
    #用变量表示特征
    school='Oldboy'
    def __init__(self,x,y,z):#__init__这个函数在调用阶段会自动执行。
        self.name=x #obj.name='monicx'
        self.age=y #obj.age=23
        self.sex=z #obj.sex='男'
obj=OldboyStudent('monicx',23,'男')

1、首先会产生一个空对象

2、会自动触发类内部的__init__函数

3、然后将空对象obj连同调用类时括号内的参数组成(obj,'monicx','23','男'),将这四个参数一起传给__init__函数。



类内部定义的变量是给所有对象共享,所有对象指向的都是同一个内存地址。


类内部定义函数,其实是给对象使用的,而且是绑定给对象用,绑定给不同的对象就是不同的绑定方法。



绑定方法的特殊之处在于,谁来调用,就会将谁当作第一个参数自动传入。

#一、调用类产生类的对象,该对象也可以称为类的一个实例,调用类的过程也称为类的实例化。
class People:
    x=100
    def __init__(self,name,age,sex):
        self.name=name
        self.age=age
        self.sex=sex

    def run(self):
        print('%s is running' %self.name)
#二、调用类发生了哪些事:
# 1、先产生一个空对象
# 2、自动触发类内部__init__函数的执行
# 3、将空对象、以及调用类括号内传入的参数,一同给__init__,为对象独有的属性

obj=People('monicx',23,'male')
obj1=People('lxx',23,'male')
obj2=People('egg',23,'male')

#会产生对象的名称空间,如何查看
print(obj.__dict__)

#对象的操作
print(obj.name) #obj.__dict__
obj.education="清华"
# del obj.name
obj.age=19
print(obj.__dict__)

#:三对象属性的查找顺序:先找对象自己的名称空间
#1、类的数据属性:是给对象用的,而且直接共享给类的所有对象使用的,内存地址都一样
print(People.x)
#2、类的函数属性,也是给对象用的,但绑定给的对象不同,就有不同的绑定方法。同存地址不一样
print(People.run)
# People.run(12321231)
People.run(obj)
print(obj.run)
print(obj1.run)
print(obj2.run)
#四绑定给方法的特殊之处
# 1、绑定给谁就应该由谁来调用。
# 2、谁来调用就把谁当作第一个参数(self)传入
obj.run()
obj1.run()
obj2.run()

# 五、一切皆对象,在Python3当中统一了类与类型的概念,类就是类型
l=list([1,2,3])
print(type(l))
print(type(obj))
l.append(4)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值