python之面向对象初识

Posted 从入门到出门

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python之面向对象初识相关的知识,希望对你有一定的参考价值。

一、面向对象初识
1、结构上 面向对象分成两部分:属性、方法

class A:
    name = \'xiaoming\'   #  静态属性、静态变量、静态字段。

    def func1(self):    # 函数、动态属性、方法。
        pass

 

 

2、函数与面向对象:
  1,函数封装一个功能,而面向对象封装多个相关的功能。
  2,面向对象比较抽象,它是一种思想,站在上帝的角度去理解它。
  3,面向对象程序可扩展,对象都是一个个独立的。耦合性,差异性。

 

复制代码
函数:
def register(argv):
    pass

def login(argv):
    pass

def shoppingcar(self):
        pass

        
面向对象:
class Shopping:
    def __init__(self):  # 特殊方法
        pass

    def register(self):
        pass

    def login(self):
        pass
        
    def shoppingcar(self):
        pass
复制代码

 

3、类与对象:
类:具有相同属性或者功能的一类实物。
对象:对象是类的具体体现。

 


二、类名、对象的使用
1、类可以理解为:一个公共框架,一个公共模型

复制代码
class person:
    animal = \'高级动物\'
    walk_way = \'直立行走\'
    language = \'语言\'

    def eat(self):
        print(\'小心吃屎你\')

    def play(self):
        print(\'天天就知道玩\')
复制代码

 

 

2、类名的使用
1,查看类中的所有属性及方法 __dict__
print(person.__dict__)         # 查看类中的所有属性及方法

print(person.__dict__[\'animal\'])    # 通过__dict__方式可以查看单独的属性及方法,但是不能进行增删改

person.__dict__[\'animal\'] = \'低级动物\'   # 改:报错

person.__dict__[\'name\'] = \'xiaoming\'    # 增:报错

del person.__dict__[\'animal\']     # 删:报错

工作中,学习中一般用到 __dict__只是用来查看类中的所有属性及方法,不进行其他操作。

 

2,查看(增删改)类中某个属性用万能的点 .

复制代码
print(person.animal)  #
print(person.language)

person.name = \'xiaoming\'  #
print(person.name)

person.language = \'中文\' #
print(person.language)

del person.walk_way  #
print(person.__dict__)
复制代码


3,操作方法,用类名可以执行方法,但是一般不通过类名操作!!!
person.__dict__[\'eat\'](111)      # 不建议通过__dict__执行方法
person.play(666)


3、对象的使用

复制代码
class person:

    animal = \'高级动物\'
    walk_way = \'直立行走\'
    language = \'语言\'

    def __init__(self,name,age,eye):  # 功能:给对象封装属性的。
        self.name1 = name
        self.age1 = age
        self.eye1 = eye
    
    def eat(self):
        print(\'小心吃屎你\')

    def play(self):
        print(\'天天就知道玩\')

        

obj = person(\'xiaobai\',1000,\'小眼睛\')  # 这个过程是一个实例化过程,他会实例化一个对象(会在内存实例化一个对象空间)。
print(obj)  #obj是对象空间的地址
print(obj.name1)  # 通过对象查看属性
复制代码

实例化过程内部进行了三个阶段:
  1,首先遇到 类名() 就会在内存中开辟一个对象空间,只有一个类对象指针(用一个变量接收这个对象空间地址)
  2,然后自动执行类中的__init__方法,并且将对象空间地址自动传给self参数,其他参数手动传入。
  3,最后执行__init__方法 给对象空间封装相应的属性。

 

对象操作对象空间:

1,对象查看对象空间所有的属性也可用 __dict__
print(obj.__dict__)       # 返回一个包含对象空间所有属性的字典

2,对象操作对象的某个属性(增删改查)用万能的点.
obj.sex = \'男\'   # 增
print(obj.sex)

del obj.eye1    # 删
print(obj.__dict__)

obj.age1 = 18   # 改
print(obj.age1)

print(obj.name1)     #查
print(obj.__dict__)  #查

 

3,对象操作类空间的属性:只能查
print(obj.animal) #查

obj.animal = \'低级动物\'       # 想要这样改类的属性,是改不了的,它会为对象生成一个animal的属性并不会改变类的                                                 animal
print(obj.animal)          # 低级动物
print(person.animal)   # 高级动物

del obj.language       # 删:报错


4,对象操作类空间的方法:对象.方法()
obj.eat()

 

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

复制代码
公用模板,公共框架
class GameRole:

    rule = \'游戏规则\'

    def __init__(self,area,nickname,hp,ad):
        self.area = area
        self.nickname = nickname
        self.hp = hp
        self.ad = ad

    def attack(self):
        print(\'攻击谁\')


gailun = GameRole(\'德玛西亚\',\'草丛伦\',1000,75)  #实例化对象gailun
yasuo = GameRole(\'艾欧尼亚\',\'托儿所\',500,89)   #实例化对象yasuo
复制代码

一张图片解释:

 


1,对象能调用类中的属性与方法,但是不能修改类的属性和方法
实例化一个对象的时候,会建立对象指向类的指针,gailun.属性名,先从自己空间去找,
没有此属性它会通过类对象指针从类去找,类中找不到,会从父类去找。

 

复制代码
gailun.attack = 666  # 这里并不是调用类的attack方法,而是给对象增加一个属性 attack = 666
print(gailun.attack)  # 666

gailun.rule = gailun.rule  # 相当于gailun.rule = \'游戏规则\'  对象.属性名=\'游戏规则\'
print(gailun.rule)

gailun.nikename = \'盖伦\'  #修改对象的属性
print(gailun.nickname)
复制代码

 

 

2,类能不能调用对象的属性? 不能,因为类没有指向对象的指针
print(GameRole.area)   # 报错


3,对象与对象之间可不可互相调用?
同一个类实例化出来的对象之间是不能互相访问的。
不同类实例化的对象有可能互相访问。


4,给对象封装属性:__init__ 任意位置。

 

 

以上是关于python之面向对象初识的主要内容,如果未能解决你的问题,请参考以下文章

Python之面向对象面向对象初识

python之面向对象初识

python基础之面向对象初识

python进阶之面向对象初识

Python 基础之面向对象初识与类的封装

python--面向对象(初识)