码迷,mamicode.com
首页 > 其他好文 > 详细

4-11 对象的交互 命名空间作用域

时间:2018-04-11 21:44:02      阅读:212      评论:0      收藏:0      [点我收藏+]

标签:info   内存   dog   code   bubuko   com   isp   other   技术   

1,对象的交互

人和狗大战之交互

技术分享图片
class Person:
    role = person
    def __init__(self,name,sex,hp,ad):
        self.name= name
        self.sex = sex
        self.hp = hp
        self.ad = ad
    def attack(self,dog):
        print(%s攻击了%s,%s掉了%s滴血%(self.name,dog.name,dog.name,self.ad))
        dog.hp -= self.ad

class Dog:
    def __init__(self,name,kind,hp,ad):
        self.name = name
        self.kind = kind
        self.hp = hp
        self.ad = ad
    def bite(self,person):
        print(%s咬了%s,%s掉了%s点血%(self.name,person.name,person.name,self.ad))
        person.hp -= self.ad
alex = Person(sb,male,45,35)
boss_jin = Person(金老板,male,34,45)
teddy = Dog(小虎,teddy,45,50)
alex.attack(teddy)
print(teddy.hp)
teddy.bite(boss_jin)
print(boss_jin.hp)
View Code

2,命名空间作用域

对象的内存空间中,只存储对象的属性,而不存储方法和静态属性。对象能找类。

方法和静态属性都存储在类的内存空间中,为了节省内存,让多个对象去共享类中的资源。

class Person:
    role = person
    def __init__(self,name,sex,hp,ad):
        self.name = name
        self.sex = sex
        self.hp = hp
        self.ad = ad
        self.hobby = girl#在自己的对象空间加载
    def attack(self):
        print(%s发起一次攻击%self.name)

alex = Person(sb, male,44,44)
boss_jin = Person(金老板,amle,60,63)
alex.attack()
alex.role = dog#在自己的对象空间加载alex.role = ‘dog‘
print(alex.__dict__)
print(boss_jin.role)#person
print(Person.role)#可以看见静态变量并没有改变  perso

加载顺序:1,类的内存空间,静态变量,方法。2,对象的内存空间,类对象指针,通过类对象指针找到类。

 

技术分享图片

 

1,静态属性和方法是共存的。对象的属性是对立的。2,对象使用名字,先找自己的内存空间,再找类的内存空间。

对于静态属性的修改,应该使用类名直接修改。调用静态变量:类名.静态变量。

 

class Person:
    money = 0
    def __init__(self,name):
        self.name = name
    def work(self):
        print(self.name,工作赚了1000元钱)
        self.money += 1000

father = Person(father)
mother = Person(mother)
father.work()
mother.work()
print(Person.money)#静态变量并没有改变
# father 工作赚了1000元钱
# mother 工作赚了1000元钱
# 0
class Person:
    money = [0]
    def __init__(self,name):
        self.name = name
    def work(self):
        print(self.name,工作赚了1000元钱)
        self.money[0] += 1000

father = Person(father)
mother = Person(mother)
father.work()
mother.work()
print(Person.money)#2000

 

 

技术分享图片

class Person:
    money = [0]
    def __init__(self,name):
        self.name = name
    def work(self):
        print(self.name,工作赚了1000元钱)
        self.money = [Person.money[0] + 1000]
father = Person(father)
mother = Person(mother)
father.work()
mother.work()
print(Person.money)#0

技术分享图片

 

 

写一个类统计有几个对象

class Foo:
    count = 0
    def __init__(self):
        Foo.count += 1
f1 = Foo()
f2 = Foo()
f3 = Foo()
f4 = Foo()
f5 = Foo()
print(Foo.coun

 

程序的解耦:

1,当计算的规模足够大的时候,我们应该在编码的过程中,让操作尽量原子化。

2,尽量用返回值代替print.

 求 几个圆的面积(1,3,5,7,9)

from math import pi
class Area:
    def __init__(self,r):
        self.r = r
    def circle(self):
        return pi*self.r*2
    def perimeter(self):
        return pi*self.r**2
for i in range(1,10,2):
    ci = Area(i)
    print(ci.circle())
    print(ci.perimeter())

 练一练

小明,10岁,男,上山去砍柴
小明,10岁,男,开车去东北
小明,10岁,男,最爱大保健
老李,90岁,男,上山去砍柴
老李,90岁,男,开车去东北
老李,90岁,男,最爱大保健
老张…
技术分享图片
class Person:
    def __init__(self,name,age,sex):
        self.name = name
        self.age = age
        self.sex = sex
    def hobby(self):
        print(%s,%s岁,%s,上山去砍材%(self.name,self.age,self.sex))
        print(%s,%s岁,%s,开车去东北%(self.name,self.age,self.sex))
        print(%s,%s岁,%s,最爱大保健%(self.name,self.age,self.sex))
xiao = Person(小明,10,)
li = Person(老李,90,)
xiao.hobby()
li.hobby()
View Code

计算两个圆环的面积和周长

from math import pi
class Area:
    def __init__(self,out_radius,in_radius):
        self.out_radius = out_radius
        self.in_radius = in_radius

    def perimeter(self):
        return pi*self.out_radius*2 + pi*self.in_radius*2

    def acir(self):
        return pi*self.out_radius**2 - pi*self.in_radius**2
ci = Area(21,20)
print(ci.perimeter())
print(ci.acir()

 

4-11 对象的交互 命名空间作用域

标签:info   内存   dog   code   bubuko   com   isp   other   技术   

原文地址:https://www.cnblogs.com/yzxing/p/8796806.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!