day15

面向对象从结构上理解分为两部分:

  1.静态属性,静态变量,静态字段

  2.动态属性,方法,函数

class A:
    name = 'ake'   #静态属性
    def func1(self):
        pass       #动态属性,方法,函数  

比如一个购物车,里面有一些功能可以好几个环节能用的,那就可以拿出来当成一个对象

class Shopping_Car:
    def __init__(self):
        pass            #特殊方法,这里面是具体对象的独特的功能,这里面可以有多个功能
    def register(self):
        pass           #每一个函数封装成一个独特的功能
    def login(self):
        pass

1.函数封装一个功能,而面向对象封装多个相关的功能

2.面向对象抽象,他是一种思想,站在上帝的角度去理解他,把想要创造的一类东西的通性放在类里,而这个类里面的独有的分支,以及个体独有的一些功能封装到对象里的一个个功能里

3.程序可扩展,对象都是一个个独立的,有偶合性,差异性

类与对象的区别:

类:是一类事物具有相同的属性

对象:对类的具体体现

我们可以比喻成一个公共的框架,一个公共的模型

class Person:
    animal = '高级动物'
    walk = '直立行走'
    language = '语言'

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

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

    def work(self):
        print('工作')
obj = Person('ake',13,2)
print(obj)             #<__main__.Person object at 0x000001536F4F0940>
print(obj.name)        #ake

这个过程是一个实例化过程(它会在内存中实例化一个对象空间)

实例化过程内部进行了三个阶段:

1.在内存中开辟了一个对象空间

2.自动执行__init__方法,并将对象空间自动传给self参数,其他参数手动传入

3.执行__innit__方法中,给对象空间封装相应的属性

对象:

  对象操作对象空间的所有属性  __dict__

print(obj.__dict__)

  对操作对象的某个属性,增删改查,使用万能的点  ‘ .’ 

class Person:
    animal = '高级动物'
    walk = '直立行走'
    language = '语言'

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

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

    def work(self):
        print('工作')
obj = Person('ake',13,2)
print(obj)             #<__main__.Person object at 0x000001536F4F0940>
print(obj.__dict__)    #{'name': 'ake', 'age': 13, 'eye': 2}
obj.sex = '男'
print(obj.__dict__)    #{'name': 'ake', 'age': 13, 'eye': 2, 'sex': '男'}   增加
obj.eye = '眼睛很大'
print(obj.__dict__)    #{'name': 'ake', 'age': 13, 'eye': '眼睛很大', 'sex': '男'}  改动
print(obj.name)        #ake   对对象空间的查

  对象对类空间的属性,只能查

class Person:
    animal = '高级动物'
    walk = '直立行走'
    language = '语言'

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

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

    def work(self):
        print('工作')
obj = Person('ake',13,2)
print(obj.animal)      #高级动物   查
obj.animal = '低级动物'
print(obj.animal)      #低级动物  虽然打印出低级动物,但是是增加到了对象空间
print(obj.__dict__)    #{'name': 'ake', 'age': 13, 'eye': '眼睛很大', 'sex': '男', 'animal': '低级动物'}
print(Person.__dict__)  #而类空间里的高级动物也依然在,并没有被修改

对象操作类空间的方法

obj.eat()

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

class GameRole:
    rule = '游戏规则'
    def __init__(self,area,nickname,hp,ad):
        self.area = area
        self.nickanme = nickname
        self.hp = hp
        self.ad = ad
    def attack(self):
        print('谁施展了一个攻击')
    def pen(self):
        self.penzi = 1000
p1 = GameRole('德玛西亚','草丛伦',1000,75)

  p1.属性名:先从自己属性空间里面找,没有此属性再通过类对象指针从类空间去找,类找不到,会从父类中找

print(p1.hp)                   #1000
p1.attack = 666
p1.attack() #TypeError: 'int' object is not callable ,显示数字类型不可以被调用,能被调用的只能是函数
print(p1.attack) #666
先执行等号右边,将游戏规则赋值给等号左边,等号左边在p1的对象空间里面又添加了一个rule,此时打印p1.rule,打印的是对象空间里新增加的那个属性
p1.rule = p1.rule
print(p1.rule)           #游戏规则 

 对象可以修改对象空间的值

p1.nickanme = '盖伦'
print(p1.nickanme)

2.类不能调用对象的属性

print(GameRole.area) 

3.对象与对象之间可不可以互相调用?

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

不同类型实例化的对象有可能互相访问

class Gamerole:
    rule = '游戏规则'
    def __init__(self, nickname, ad, hd):
        self.nickname = nickname
        self.ad = ad
        self .hd = hd

    def atterk(self,w):
        self.waepon = w
p1 = Gamerole('艾伦', 20, 100)
p2 = Gamerole('剑豪', 50, 200)
class Weapon:
    def __init__(self, w, ad):
        self.w = w
        self.ad = ad
    def fight(self,sole1, sole2):
        sole2.hd = sole2.hd - self.ad
        print('{}攻击了{},{}受伤了,掉了{}血,还剩{}血'
              .format(sole1.nickname, sole2.nickname, sole2.nickname, self.ad, sole2.hd))
w1 = Weapon('刀', 20)
w2 = Weapon('剑', 50)
p2.atterk(w2)
p2.waepon.fight(p2, p1)

 Weapon类将w1传入Gamerole类里面的atterk方法里,这样p2就可以调用此类里面的方法此种方法的原理就是:给一个类的对象封装一个属性,而这个属性是另一个类的对象

原文地址:https://www.cnblogs.com/beriuta/p/9527251.html