python_面向对象基础

一、面向对象初始

  1、结构上理解面向对象:两部分

class Person:
    animal = '高级动物'    #静态属性
    walk = '直立行走'

    def work(self):         #方法,动态属性
        print('工作。。。。。')
View Code

   函数vs对象

  1、函数封装一个功能,对象封装多个功能

  2、面向对象抽象,它是一种思想

  3、可扩展,对象一个个都是独立的,耦合性,差异性

  类:具有相同属性和功能的一类实物

  对象:类的具体体现

  

  2、类名,对象的使用

  一个公共框架,一个公共模型

class Person:
    walk_way = '直立行走'
    language = '语言'

    def eat(self):
        print('吃饭。。。')

    def work(self):
        print('工作。。。')

1、查看类中所有的属性方法
Person.__dict__
Person.__dict__['animal'] 通过__dict__方式可以对属性进行查看,但不能对其增改

2、查(增删改)类中某个或某些属性可以用万能的点
print(Person.walk_way)  #'直立行走'
Person.name = 'alex'   #
del Person.eat  #
Person.walk_way = ''   #

3、操作方法一般不建议通过类名操作
Person.__dict__['eat'](111)
Person.eat(6666)
View Code

  

  3、对象 

class Person:
    animal = '高级动物'
    walk_waf = '直立行走'

    def __init__(self,name,age,sex):
        self.name = name
        self.age = age
        self.sex = sex

    def eat(self):
        print('吃饭。。。。')

obj= Person('xx',18,'male')
这个过程就是实例化,会产生一个实例化对象(在内存实例化一个对象空间)

实例化过程内部进行了三个阶段
1、在内存开辟一个对象空间,里面存放了类对象指针
2、自动执行类中__init__方法,将对象空间传给参数self,其它参数手动传入
3、执行__init__方法,给对象空间封装相应的属性

对象查看对象空间中的所有属性__dict__
对象操作对象空间(增删改查)用万能的点
obj.name  #
obj.name = 'alex'  #
obj.hobby = 'music'  #
del obj.sex = 删

对象操作类空间的属性,只能查
对象操作类空间的方法obj.work()
View Code

  4、类名称空间,对象名称空间

  1、定义一个类,程序从上往下执行,会在内存中开辟一个空间,存放类中的属性和方法

  2、实例化这个类时,会在内存中开辟一个新的对象空间,里面有个类的对象指针

  3、为什么对象能调用类中的属性与方法,而且只是调用?不能改变?

    1、对象先从对象空间中去找,找不到然后通过类对象指针从类中查找,找不到然后从父类中查找。

    2、对象只能查看类中的属性,不能进行增删改

  4、类不能调用对象中的属性

  5、同一个类实例化出来的对象之间是不能互相访问的 

  6、不同类实例化出来的对象可能可以互相访问

  7、给对象封装属性,__init__  任意位置

  

原文地址:https://www.cnblogs.com/echo-up/p/9526138.html