Python基础(24)——面向对象和实例属性

三大编程范式:编程方法论

面向过程、函数式编程、面向对象   (没有最强的方法,只有最强的人)

函数式编程是数学意义的函数,参数是函数或者返回是函数,没有变量的赋值,循环用递归实现,并不是用函数来编程的意思

编程进化,流程化编程---(不好维护,复杂,无组织无结构)---重复的功能逻辑组织起来,形成结构化---属性数据和动作集合在一起的对象,描述一个对象的编程就是面向对象,面向对象是封装了对象私有的属性和动作,绑定成对象或者类

所有的事物都可以用属性和动作来描述

并不是只有类才是面向对象,函数也可以是面向对象,利用嵌套函数实现

类:把一类事物的相同特征和动作整合到一起就是类,类是一个抽象的概念,类也是一种数据结构,结构化的

对象:就是基于类而创建的一个具体的事物,是具体存在的,也是特征和动作整合到一起,这个叫面向对象设计

面向对象编程:OOP (object -oriented programming)用定义类+实例对象的方式去实现面向对象设计

类:

实例化一个类的时候要加()

经典类  class 名:          新式类  calss 名(名):有继承    在Python3中都是新式类

类的属性包含两种:数据属性就是变量        函数属性就是面向对象里称为方法,  都通过点.来访问,其实通过点来查找属性就是通过 属性字典里来查找那个功能,这个点相当于 类.__dict__['属性名']() 调用的属性字典的内容

类.__dict__    是类的属性字典           dir只是放类的名字     dict则对应详细的字典内容

 对象:

class sth:
    def __init__(self,name,age):
        self.name=name
        self.age=age

s1=sth('alex','18')
print(s1.name)

self就是实例的自己,init是初始化函数,会自动取参数,并返回的字典,self.name其实是在找字典中的键,当实例化的时候实际上是找字典键值,见下图

扫描二维码关注公众号,回复: 6801577 查看本文章
class sth:
    def __init__(self,name,age):
        self.name=name
        self.age=age

s1=sth('alex','18')
print(s1.__dict__)

结果是

{'name': 'alex', 'age': '18'}    #实际上看到的是一个字典的数据结构,只是类的这种数据类型会自动专门处理返回值并不需要添加return

当在__init__作用域中找不到的功能,那么就会向外一层来找,所以实例化的调用是在全类作用域中找属性和方法。函数属性是属于类的作用域,所以实例只有数据属性

类的字典是比实例的范围大的,包括了类的方法,所以,类中的方法都要加self,把实例名字当参数传入之中,所以实例加点也可调用到类中的函数方法,只要函数方法中加self参数。深层次思考,实例化的时候只是初始化并没绑定函数方法,但是只有用到方法的时候才会调用进来,这样节省内存,并不需要全都加载进来。类的设计就是实例调用方法就是调用类的方法。

其实第一个参数是类自动传的,可以起别的名字,调用类的功能自动把自己传入第一个参数

类中所有函数的第一个参数一定是self,类命名为驼峰命名

类的增删改查    删del

实例的增删改查 不影响类的属性,他在用自己的作用域  ,如果定义变量的时候没加self 那么在他其中的赋值 是不在自己的作用域内的,是整个函数的变量

a=12
class sth:
    a=14
    def __init__(self,name,age):
        self.name=name
        self.age=age
        print(a)   #这里的a并不是类里的变量,因为没加self格式,如果没有会报错,调用的时候没用 点. 来引用就和类没关系

s1=sth('alex','18')
print(sth.a)

12
14

实例中的操作一定是用赋值完成的,列表append等方法在实例中没有赋值完的情况下,只能是对类的属性产生作用,并不能在实例中加入变量

class sth:
    a=[14]
    def __init__(self,name,age):
        self.name=name
        self.age=age

s1=sth('alex','18')
# s1.a=['a','b']
s1.a.append('c')
print(s1.__dict__)
print(sth.__dict__)

猜你喜欢

转载自www.cnblogs.com/dayouge/p/11183934.html
今日推荐