标签:strong map 语法 font 返回 参考 使用 部分 att
一、参考连接:
https://www.cnblogs.com/Eva-J/articles/7293890.html
二、初识类:
1 class Person: #类名 2 country=‘China‘ #静态属性 3 def __init__(self,*args): 4 #self类似一个空字典 5 #print(self.__dict__) 6 self.name=args[0] 7 self.hp=args[1] 8 self.aggr=args[2] 9 self.sex=args[3] 10 def walk(self,n): #这里的self是一个参数,可以进行改变,但是这里必须要传递参数,这里的参数就是下面实例化的对象 11 print("%s走了%s步"%(self.name,n)) 12 13 print(Person.country) #类名 可以查看类中的属性,不需要实例化就可以查看 14 15 xiaoling=Person("邓晓灵",200,20,"f") #实例化 16 17 print(xiaoling.__dict__) #查看所有属性值 18 print(xiaoling.country) #查看属性值 19 20 Person.walk(xiaoling,5) #调用方法 类命.方法名(对象名) 21 xiaoling.walk(5) #对象名.方法名(参数) 22 23 print(Person.__dict__) #这个的结果为字典 24 print(Person.__dict__[‘country‘]) #China 25 26 Person.__dict__[‘country‘]=‘japan‘ 27 print(Person.__dict__[‘country‘]) #‘mappingproxy‘ object does not support item assignment 对于类的字典,只能查看,无法修改。 28 29 print(xiaoling.__dict__["name"]) #邓晓灵 30 xiaoling.name=‘二狗‘ #修改 31 print(xiaoling.__dict__[‘name‘]) #二狗
参考图片:
对象 = 类名()
过程:
类名() 首先 会创造出一个对象,创建了一个self变量
调用init方法,类名括号里的参数会被这里接收
执行init方法
返回self
对象能做的事:
查看属性
调用方法
__dict__ 对于对象的增删改查操作都可以通过字典的语法进行
类名能做的事:
实例化
调用方法 : 只不过要自己传递self参数
调用类中的属性,也就是调用静态属性
__dict__ 对于类中的名字只能看 不能操作
练习一:
1 #小明,10岁,男,上山去砍柴 2 #小明,10岁,男,开车去东北 3 #小明,10岁,男,最爱大保健 4 #老李,90岁,男,上山去砍柴 5 #老李,90岁,男,开车去东北 6 #老李,90岁,男,最爱大保健 7 8 class Person: 9 def __init__(self,name,age,sex): 10 self.name=name #这里不能打逗号,否则结果就会变成: (‘邓晓灵‘,),(26,)岁,男,上山去砍柴 11 self.age=age 12 self.sex=sex 13 14 def shangshan(self): 15 print("%s,%s岁,%s,上山去砍柴"%(self.name,self.age,self.sex)) 16 def drive(self): 17 print("%s,%s岁,%s,开车去东北"%(self.name,self.age,self.sex)) 18 def favor(self): 19 print("%s,%s岁,%s,开车去东北"%(self.name,self.age,self.sex)) 20 21 xiaoling=Person(‘邓晓灵‘,26,‘男‘) 22 caicai=Person(‘蔡莉‘,25,"女") 23 24 xiaoling.shangshan() 25 caicai.shangshan()
练习二:求圆形的周长和面积
1 from math import pi 2 class Circle: 3 def __init__(self,r): 4 self.r=r 5 def zhouchang(self): 6 print(2*pi*self.r) 7 def mianji(self): 8 print(self.r**2*pi) 9 C1=Circle(5) 10 C1.zhouchang() 11 C1.mianji()
练习三:求正方形周长和面积
class Square: def __init__(self,L): self.Lenth=L def zhouchang(self): print(4*self.Lenth) def mianyi(self): print(self.Lenth**2) S1=Square(4) #4已经传进self了 S1.zhouchang() S1.mianyi()
练习四:人狗大战
1 #错误部分 2 class Dog: 3 def __init__(self,name,aggr,hp,kind): 4 self.name=name 5 self.aggr=aggr 6 self.hp=hp 7 self.kind=kind 8 def bite(self,Person): #这里的Person是一个形参,并不是下面的Person类。 9 Person.hp-=Dog.aggr #报错:type object ‘Dog‘ has no attribute ‘aggr‘ 10 print("%s咬人,人掉了%s的血"%(Dog.name,Dog.aggr)) 11 12 class Dog: 13 def __init__(self,name,aggr,hp,kind): 14 self.name=name 15 self.aggr=aggr 16 self.hp=hp 17 self.kind=kind 18 def bite(self,Person): 19 Person.hp-=self.aggr 20 print(‘%s咬人,人掉了%s的血‘%(self.name,self.aggr)) #type object ‘Person‘ has no attribute ‘hp‘ 21 22 #正确部分 23 class Dog: 24 def __init__(self,name,aggr,hp,kind): 25 self.name=name 26 self.aggr=aggr 27 self.hp=hp 28 self.kind=kind 29 def bite(self,person): 30 person.hp-=self.aggr 31 print(‘%s咬人,人掉了%s的血‘%(self.name,self.aggr)) 32 33 34 class Person: 35 def __init__(self,name,aggr,hp,sex): 36 self.name=name 37 self.aggr=aggr 38 self.hp=hp 39 self.sex=sex 40 def hit(self,dog): 41 dog.hp-=self.aggr 42 print("%s打了狗,狗掉了%s的血"%(self.name,self.aggr)) 43 44 D1=Dog("pipi",10,100,"二哈") 45 P1=Person("晓灵",20,200,"f") 46 47 D1.bite(P1) 48 P1.hit(D1)
练习五:面向对象的交互之人狗大战
1 class Dog: 2 def __init__(self,name,hp,aggr,kind): 3 self.name=name 4 self.hp=hp 5 self.aggr=aggr 6 self.kind=kind 7 def bite(self,person): 8 person.hp-=self.aggr 9 class Person: 10 def __init__(self,name,hp,aggr,sex): 11 self.name=name 12 self.hp=hp 13 self.aggr=aggr 14 self.sex=sex 15 def hite(self,dog): 16 dog.hp-=self.aggr 17 18 D1=Dog("pipi",1000,200,"miaomiao") 19 P1=Person("晓灵",5000,300,"f") 20 21 D1.bite(P1) 22 print(P1.hp) 23 24 P1.hite(D1) 25 print(D1.hp)
以上为day22课程,已完成
1 class Course: 2 language = ‘Chinese‘ 3 def __init__(self,teacher,course_name,period,price): 4 self.teacher = teacher 5 self.name = course_name 6 self.period = period 7 self.price = price 8 def func(self): 9 pass 10 11 Course.language="English" #类中的静态属性只能使用这个方法修改,不能使用dict来进行修改 12 Course.__dict__[‘language‘]="English" #报错:‘mappingproxy‘ object does not support item assignment 13 print(Course.language) 14 15 python = Course(‘egon‘,‘python‘,‘6 months‘,20000) 16 linux = Course(‘oldboy‘,‘linux‘,‘6 months‘,20000) 17 18 python.language=‘印度‘ #这是在python对象的空间中创建了一个language属性,类是无法调用到的。参考截图 19 print(python.language) #印度 20 print(linux.language) #[‘Chinese‘],在自己的对空间中如果没找到language属性,就会去类空间中寻找
参考下图:
1 #把‘Chinese‘,修改为[‘Chinese‘] 2 class Course: 3 language = [‘Chinese‘] 4 def __init__(self,teacher,course_name,period,price): 5 self.teacher = teacher 6 self.name = course_name 7 self.period = period 8 self.price = price 9 def func(self): 10 pass 11 12 #Course.language[0]="English" 13 python = Course(‘egon‘,‘python‘,‘6 months‘,20000) 14 linux = Course(‘oldboy‘,‘linux‘,‘6 months‘,20000) 15 16 Course.language[0]="印度" 17 print(Course.language) #[‘印度‘] 18 19 python.language[0]=‘English‘ 20 python.language=‘English‘ #区别上面和这个,这个相当于直接创建了新的属性,如下。上面一种是修改已存在的属性值。 21 print(python.__dict__) #{‘language‘: ‘English‘, ‘name‘: ‘python‘, ‘period‘: ‘6 months‘, ‘price‘: 20000, ‘teacher‘: ‘egon‘} 22 print(Course.language) #[‘English‘]
参考截图:
类中的静态变量 可以被对象和类调用
对象找名字 : 先找自己的 找类的 再找不到就报错
对象修改静态属性的值
对于不可变数据类型来说,类变量最好用类名操作
对于可变数据类型来说,对象名的修改是共享的,重新赋值是独立的
认识绑定:
组合:一个对象的属性值是另外一个类的对象
1 class Dog: 2 def __init__(self,name,aggr,hp,kind): 3 self.name=name 4 self.aggr=aggr 5 self.hp=hp 6 self.kind=kind 7 def bite(self,person): 8 person.hp-=self.aggr 9 10 class Person: 11 def __init__(self,name,aggr,hp,sex): 12 self.name=name 13 self.aggr=aggr 14 self.hp=hp 15 self.sex=sex 16 self.money=0 17 def attack(self,dog): 18 dog.hp-=self.aggr 19 20 def get_weapon(self,weapon): 21 if self.money>weapon.price: 22 self.money-=weapon.price 23 self.aggr+=weapon.aggr 24 self.weapon=weapon 25 else: 26 print("余额不足") 27 class Weapon: 28 def __init__(self,name,aggr,njd,price): 29 self.name=name 30 self.aggr=aggr 31 self.njd=njd 32 self.price=price 33 def hand18(self,obj): 34 if self.njd>0: 35 obj.hp-=self.aggr*2 36 self.njd-=1 37 38 D=Dog(‘pipi‘,100,500,‘teddy‘) 39 P=Person(‘晓灵‘,0.5,100,‘不详‘) 40 W=Weapon(‘打狗棒‘,150,3,998) 41 42 P.money+=1000 43 P.get_weapon(W) 44 print(P.money) 45 print(P.aggr) 46 P.weapon.hand18(D) 47 print(D.hp) 48 print(P.weapon) 49 P.attack(D) 50 print(D.hp)
练习:圆环类
1 from math import pi 2 class Out_ring: 3 def __init__(self,r): 4 self.r=r 5 def O_aera(self): 6 #self.r ** 2 * pi 7 return self.r ** 2 * pi 8 def O_perimeter(self): 9 return 2*pi*self.r 10 11 class In_ring: 12 def __init__(self,r): 13 self.r=r 14 def I_area(self): 15 return pi*self.r**2 16 def I_perimeter(self): 17 return 2*pi*self.r 18 19 class Cicle: 20 def __init__(self,O_r,I_r): 21 # self.O_r=O_r #如果这样写就没有把值传到Out_ring中 22 # self.I_r=I_r 23 self.O_r=Out_ring(O_r) 24 self.I_r=In_ring(I_r) 25 26 def area(self): 27 # Out_ring.O_aera(self.O_r)-In_ring.I_area(self.I_r) #print出来结果为null,这里括号里不用在加值进去。 28 return self.O_r.O_aera()-self.I_r.I_area() 29 def perimeter(self): 30 return Out_ring.O_perimeter(self.O_r)+In_ring.I_area(self.I_r) 31 32 C1=Cicle(5,4) 33 print(C1.area()) 34 print(C1.perimeter()) 35 36 #修改 37 from math import pi 38 class Circle: 39 def __init__(self,r): 40 self.r=r 41 42 def area(self): 43 return self.r**2*pi 44 def perimeter(self): 45 return 2*self.r*pi 46 47 class Ring: 48 def __init__(self,Or,Ir): 49 self.OC=Circle(Or) #这步是组合的过程 50 self.IC=Circle(Ir) 51 52 def ring_area(self): 53 return self.OC.area()-self.IC.area() 54 def ring_perimeter(self): 55 return self.OC.perimeter()+self.IC.perimeter() 56 57 58 R=Ring(5,4) 59 print(R.ring_area()) 60 print(R.ring_perimeter())
标签:strong map 语法 font 返回 参考 使用 部分 att
原文地址:https://www.cnblogs.com/caili/p/10430399.html