面向对象
例子一
def Person(name, blood, aggr, sex):
person = {
'name': name,
'blood': blood,
'aggr': aggr,
'sex': sex
# 'attack': attack # 函数名,攻击技能
}
def attack(dog):
dog['blood'] -= person['aggr']
print('%s被打了,掉了%s的血' % (dog['name'], person['aggr']))
person['attack'] = attack
return person
def Dog(name, blood, aggr, kind):
dog = {
'name': name,
'blood': blood,
'aggr': aggr,
'kind': kind
# 'bite': bite
}
def bite(person):
person['aggr'] -= dog['aggr']
print('%s被咬了,掉了%s的血' % (person['name'], dog['aggr']))
dog['bite'] = bite
return dog
jin = Dog('金老板', 1000, 100, 'teddy')
alex = Person('狗剩儿', 100, 1, 'None')
nezhe = Person('哪吒', 200, 2, 'None')
print(jin)
jin['bite'](alex)
alex['attack'](jin)
# Dog()函数和Person()函数都是定义了一类事物
# 直到调用了函数,赋值之后才真的有了一个实实在在的意义
# 自定义类
# class 类名:
# 属性 = 'a'
# print(类名.属性)
# 类名的作用就是操作属性,查看属性
例子二
class Person:
country = 'China'
def __init__(self, *args) -> None: # self相当于一个空字典,返回self None表示返回值的类型,初始化方法,self是对象,是一个必须传的参数
self.name = args[0]
self.hp = args[1]
self.aggr = args[2]
self.sex = args[3]
print(args)
def walk(self): # 一般情况下,必须要传self参数在第一个,后面还可以传其他参数
print('zouzouzou')
alex = Person('狗剩儿', 100, 1, 'None') # 传的参数,实例化,得到的结果是一个实例
print(alex.name)
print(alex.hp)
print(alex.aggr)
Person.walk(alex) # 调用方法,类名.方法名(对象名) 等效为对象名.walk(),如果还有参数,可以卸载walk(n)中
# Person.__dict__['country'] ,类的字典不能改,对象的可以修改
# 类名()首先创造出一个对象,创建一个self变量
# 调用init方法,类名括号里的参数会被这里接收
# 执行init方法
# 返回self
# 对象能做的事:查看属性,调用方法
# 类名能做的事:实例化,调用方法,只不过要自己传递self参数。调用类中的属性(类属性,静态属性)
例子三
def Person(*args, **kwargs):
self = {}
def attack(self, dog):
dog['life_value'] -= self['aggressivity']
def __init__(name, aggressivity, life_value):
self['name'] = name
self['aggressivity'] = aggressivity
self['life_value'] = life_value
self['attack'] = attack
__init__(*args, **kwargs)
return self
egg = Person('egon', 78, 10)
print(egg['name'])
例子四
class Dog:
def __init__(self, name, blood, aggr, kind):
self.name = name
self.blood = blood
self.aggr = aggr
self.kind = kind
def bite(self, person):
person.blood -= self.aggr
class Person:
def __init__(self, name, blood, aggr, sex):
self.name = name
self.blood = blood
self.aggr = aggr
self.sex = sex
def attack(self, dog):
dog.blood -= self.aggr
jin = Dog('金老板', 100, 20, 'teddy')
alex = Person('alex', 999, 998, 'None')
jin.bite(alex)
print(alex.blood)
例子五
'''
练习一:在终端输出如下信息
小明,10岁,男,上山去砍柴
小明,10岁,男,开车去东北
小明,10岁,男,最爱大保健
老李,90岁,男,上山去砍柴
老李,90岁,男,开车去东北
老李,90岁,男,最爱大保健
老张…
'''
class Person:
def __init__(self, name, age, sex) -> None:
self.name = name
self.age = age
self.sex = sex
def shangshan(self):
print('%s,%s岁,%s上山去砍柴' % (self.name, self.age, self.sex))
def drive(self):
print('%s,%s岁,%s开车去东北' % (self.name, self.age, self.sex))
def favor(self):
print('%s,%s岁,%s最爱大保健' % (self.name, self.age, self.sex))
ming = Person('小明', '10', '男')
ming.shangshan()
ming.drive()
ming.favor()
例子六
class Circle:
def __init__(self, r) -> None:
self.r = r
def area(self):
return pi*(self.r**2)
def perimeter(self):
return 2*pi*self.r
c1 = Circle(5)
print(c1.area())
print(c1.perimeter())
'''
定义类
init方法
self拥有属性的对象
类中可以定义静态属性
实例化
实例、对象
对象查看属性
对象调用属性
类中可以定义方法,方法要传入self
'''