python对象之间的交互

python

先看看一般的类定义如下:

class 类名:

def __init__(self,参数1,参数2):

self.对象的属性1 = 参数1

self.对象的属性2 = 参数2

def 方法名(self):pass

def 方法名2(self):pass

对象名 = 类名(1,2) #对象就是实例,代表一个具体的东西

#类名() : 类名+括号就是实例化一个类,相当于调用了__init__方法

#括号里传参数,参数不需要传self,其他与init中的形参一一对应

#结果返回一个对象

对象名.对象的属性1 #查看对象的属性,直接用 对象名.属性名 即可

对象名.方法名() #调用类中的方法,直接用 对象名.方法名() 即可

对象之间的交互

现在我们已经有一个人类了,通过给人类一些具体的属性我们就可以拿到一个实实在在的人。
现在我们要再创建一个狗类,狗就不能打人了,只能咬人,所以我们给狗一个bite方法。
有了狗类,我们还要实例化一只实实在在的狗出来。
然后人和狗就可以打架了。现在我们就来让他们打一架吧!

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
print(egg.name) # 在obj.name会先从obj自己的名称空间里找name,找不到则去类中找,类也找不到就找父类...最后都找不到就抛出异常

ha2 = Dog('二愣子','哈士奇',10,1000) #创造了一只实实在在的狗ha2

print(ha2.life_value) #看看ha2的生命值

egg.attack(ha2) #egg打了ha2一下

print(ha2.life_value) #ha2掉了10点血

面向对象的组合用法

组合指的是,在一个类中以另外一个类的对象作为数据属性,称为类的组合

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来使用组合类中的所有方法

圆环是由两个圆组成的,圆环的面积是外面圆的面积减去内部圆的面积。圆环的周长是内部圆的周长加上外部圆的周长。
这个时候,我们就首先实现一个圆形类,计算一个圆的周长和面积。然后在"环形类"中组合圆形的实例作为自己的属性来用

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) #打印圆面积和周长

class Ring:

'''

定义了一个圆环类

提供圆环的面积和周长的方法

'''

def __init__(self,radius_outside,radius_inside):

self.outsid_circle = Circle(radius_outside)

self.inside_circle = Circle(radius_inside)

def area(self):

return self.outsid_circle.area() - self.inside_circle.area()

def perimeter(self):

return self.outsid_circle.perimeter() + self.inside_circle.perimeter()

ring = Ring(10,5) #实例化一个环形

print(ring.perimeter()) #计算环形的周长

print(ring.area()) #计算环形的面积

用组合的方式建立了类与组合的类之间的关系,它是一种‘有’的关系,比如教授有生日,教授教python课程

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)

'''

运行结果:

1995 1 27

python 28000 4 months

'''

以上是 python对象之间的交互 的全部内容, 来源链接: utcz.com/z/387651.html

回到顶部