一.类的基本语法
1)类的命名:大驼峰体(也就是每个单词的首字母都大写,并且没有下划线或其他分隔符。例如,“MyClassName”。这样的命名规范在Python中被广泛应用于类的命名。)
class DogFight:
2)例子
class Dog:
d_name="DinDin" #属性,类属性,类变量
d_type="二哈"
def say_hi(self): #self 代表实例本身
print('hi,my name is',self.d_name)
print("hi,my type is",self.d_type)
dog1=Dog()#要打括号,否则为赋值
dog2=Dog()#生成第二个实例
dog2.say_hi()# 实例.方法
print(dog1.d_type)# 实例.属性
输出
二.私有属性
print(id(dog1.d_type))
print(id(dog2.d_type))
可以看到,两者指向了同一个地址
class Dog:
d_type="二哈" #属性,类属性,类变量
def __init__(self,name,age):#初始化方法,构造方法,构造函数,实例化时会自动执行初始化工作
print("hhhhhhhhhh")
def say_hi(self): #self 代表实例本身
print("hi,my type is",self.d_type)
dog1=Dog('大白',4)#要打括号,否则为赋值
在实例化dog1时,控制台打印hhhhhhhh
如图写代码会报错
def__init__():函数运行完后name与age不会保存,def say_hi无法调用
要想把name和age存下来,就要和实例绑定
self型方法的调用的实质
class Dog: # 定义一个狗类
role = 'dog' # 狗的角色属性都是狗
def __init__(self, name, breed, attack_val):
self.name = name
self.breed = breed # 每一只狗都有自己的品种;
self.attack_val = attack_val # 每一只狗都有自己的攻击力;
self.life_val = 100 # 每一只狗都有自己的生命值;
def bite(self, person):
# 狗可以咬人,这里传递进来的person也是一个对象。
person.life_val -= self.attack_val # 狗咬人,那么人的生命值就会根据狗的攻击力而下降
print("狗[%s]咬了人[%s],人掉血[%s],还剩血量[%s]..." % (self.name,person.name,self.attack_val,person.life_val))
class Person: # 定义一个人类
role = 'person' # 人的角色属性都是人
def __init__(self, name, sex, attack_val):
self.name = name
self.attack_val = attack_val
self.life_val = 100
self.sex = sex
def attack(self,dog):
# 人可以攻击狗,这里传递进来的dog也是一个对象。
# 人攻击狗,那么狗的生命值就会根据人的攻击力而下降
dog.life_val -= self.attack_val
print("人[%s]打了狗[%s],狗掉血[%s],还剩血量[%s]..." % (self.name,dog.name,self.attack_val,dog.life_val))
d1 = Dog("Mjj","二哈",30)
d2 = Dog("马金毛","金毛",40)
p1 = Person("Alex","M",50)
p1.attack(d1) # 2个对象就交互上了
d1.bite(p1) # 2个对象就交互上了
三.依赖关系
类之间的依赖关系指的是一个类在其定义中需要引用其他类或模块的情况。
import random
class Player:
def __init__(self,name,gender):
self.name=name
self.gender=gender
self.attack=random.randint(10,20)
self.hp=100
def attack_player(self,monster):
monster.hp-=self.attack
print('[%s]攻击了[%s],[%s]还剩[%s]点血量'%(self.name,monster.name,monster.name,monster.hp))
class Monster:
hp=40
def __init__(self,name):
self.name=name
self.attack=random.randint(5,10)
self.hp=40
def attack_monster(self,player):
player.hp-=self.attack
print('[%s]攻击了[%s],[%s]还剩[%s]点血量' % (self.name, player.name, player.name, player.hp))
play1=Player('佛耶鸽','male')
monster1=Monster('蓝霸服')
play1.attack_player(monster1)
monster1.attack_monster(play1)
结果输出