1. 程式人生 > >對象之間的交互

對象之間的交互

int 方式 clas OS 綁定 wid ole sel ffffff

class Person:  # 定義一個人類
    role = person  # 人的角色屬性都是人

    def __init__(self, name, aggressivity, life_value):
        self.name = name  # 每一個角色都有自己的昵稱;
        self.aggressivity = aggressivity  # 每一個角色都有自己的攻擊力;
        self.life_value = life_value  # 每一個角色都有自己的生命值;

    def attack(self,dog):
        
# 人可以攻擊狗,這裏的狗也是一個對象。 # 人攻擊狗,那麽狗的生命值就會根據人的攻擊力而下降 dog.life_value -= self.aggressivity class Dog: # 定義一個狗類 role = dog # 狗的角色屬性都是狗 def __init__(self, name, breed, aggressivity, life_value): self.name = name # 每一只狗都有自己的昵稱; self.breed = breed # 每一只狗都有自己的品種; self.aggressivity = aggressivity #
每一只狗都有自己的攻擊力; self.life_value = life_value # 每一只狗都有自己的生命值; def bite(self,people): # 狗可以咬人,這裏的狗也是一個對象。 # 狗咬人,那麽人的生命值就會根據狗的攻擊力而下降 people.life_value -= self.aggressivity egg = Person(egon,10,1000) #創造了一個實實在在的人egg ha2 = Dog(二楞子,哈士奇,10,1000) #創造了一只實實在在的狗ha2 print(ha2.life_value) #
看看ha2的生命值 egg.attack(ha2) #egg打了ha2一下 print(ha2.life_value) #ha2掉了10點血

舉個栗技術分享圖片

技術分享圖片栗子
from math import pi

class Circle:
    ‘‘‘
    定義了一個圓形類;
    提供計算面積(area)和周長(perimeter)的方法
    ‘‘‘
    def __init__(self,radius):
        self.radius = radius

    def area(self):
         return pi * self.radius * self.radius

    def perimeter(self):
        return 2 * pi *self.radius


circle =  Circle(10) #實例化一個圓
area1 = circle.area() #計算圓面積
per1 = circle.perimeter() #計算圓周長
print(area1,per1) #打印圓面積和周長

類命名空間與對象、實例的命名空間

創建一個類就會創建一個類的名稱空間,用來存儲類中定義的所有名字,這些名字稱為類的屬性

而類有兩種屬性:靜態屬性和動態屬性

  • 靜態屬性就是直接在類中定義的變量
  • 動態屬性就是定義在類中的方法

創建一個對象/實例就會創建一個對象/實例的名稱空間,存放對象/實例的名字,稱為對象/實例的屬性

在obj.name會先從obj自己的名稱空間裏找name,找不到則去類中找,類也找不到就找父類...最後都找不到就拋出異常

面向對象的組合用法

軟件重用的重要方式除了繼承之外還有另外一種方式,即:組合

組合指的是,在一個類中以另外一個類的對象作為數據屬性,稱為類的組合

class Weapon:
    def prick(self, obj):  # 這是該裝備的主動技能,紮死對方
        obj.life_value -= 500  # 假設攻擊力是500

class Person:  # 定義一個人類
    role = person  # 人的角色屬性都是人

    def __init__(self, name):
        self.name = name  # 每一個角色都有自己的昵稱;
        self.weapon = Weapon()  # 給角色綁定一個武器;
        
egg = Person(egon)
egg.weapon.prick() 
#egg組合了一個武器的對象,可以直接egg.weapon來使用組合類中的所有方法

圓環是由兩個圓組成的,圓環的面積是外面圓的面積減去內部圓的面積。圓環的周長是內部圓的周長加上外部圓的周長。
這個時候,我們就首先實現一個圓形類,計算一個圓的周長和面積。然後在"環形類"中組合圓形的實例作為自己的屬性來用

技術分享圖片
class BirthDate:
    def __init__(self,year,month,day):
        self.year=year
        self.month=month
        self.day=day

class Couse:
    def __init__(self,name,price,period):
        self.name=name
        self.price=price
        self.period=period

class Teacher:
    def __init__(self,name,gender,birth,course):
        self.name=name 
        self.gender=gender
        self.birth=birth
        self.course=course
    def teach(self): 
        print(teaching)

p1=Teacher(egon,male, 
            BirthDate(1995,1,27), 
            Couse(python,28000,4 months)
           ) 

print(p1.birth.year,p1.birth.month,p1.birth.day) 

print(p1.course.name,p1.course.price,p1.course.period)
‘‘‘ 
運行結果: 
1 27 
python 28000 4 months 
‘‘‘
View Code

對象之間的交互