博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python面向对象
阅读量:7071 次
发布时间:2019-06-28

本文共 3293 字,大约阅读时间需要 10 分钟。

__init__方法 初始化方法

python帮我们创建了一个对象self
 每当我们调用类的时候就会自动触发这个方法。默认传self
 在init方法里面可以对self进行赋值
self是什么 self拥有属性都属于对象
在类的内部,self就是一个对象
 alex = Person()
alex.walk == Person.walk(alex)
 实例化
对象 = 类(参数是init方法的)
 实例、对象 完全没有区别
 对象查看属性
 对象.属性名
对象调用方法
 对象.方法名(参数) ==类名.方法名(对象名,参数)

self有点像是一个字典,self.属性就是key,=号后面内容就是value

类和对象都有.__dict__方法,返回的就是个字典

对象.__dict__[属性]=sth,可以修改属性值

类属性不能像上边这种方法改

类属性是可以给对象共享的,

类中有属于类的属性(不加self),可以使用,类.属性 调用,也可以对象.属性调用,当此属性是不可变类型时,如果使用对象.属性=sth,进行修改,实际相当用在对象的内存空间中创建了self.属性=sth,类.属性不受影响。如果还想通过对象.属性调用类.属性的值,要用del函数把对象.属性删除,这样在对象找不到该属性的时候,就会去类的内存空间中去找。

但如果类属性是可变类型,例如list,  类.属性a=list ,调用对象.属性a[0]=sth,实际上将类.属性a也进行了修改,但是如果调用对象.属性a=sth,实际上又是在对象的内存空间中创建了一个self.属性a=sth

 

# 组合# 人狗大战class Dog:    def __init__(self,name,aggr,hp,kind):        self.name = name        self.aggr = aggr        self.hp = hp        self.kind = kind    def bite(self,person):        person.hp -= self.aggrclass Person:    def __init__(self,name,aggr,hp,sex):        self.name = name        self.aggr = aggr        self.hp = hp        self.sex = sex        self.money = 0    def attack(self,dog):        dog.hp -= self.aggr    def get_weapon(self,weapon):        if self.money >= weapon.price:            self.money -= weapon.price            self.weapon = weapon            self.aggr += weapon.aggr        else:            print("余额不足,请先充值")class Weapon:    def __init__(self,name,aggr,njd,price):        self.name = name        self.aggr = aggr        self.njd = njd        self.price = price    def hand18(self,person):        if self.njd > 0:            person.hp -= self.aggr * 2            self.njd -= 1alex = Person('alex',0.5,100,'不详')jin = Dog('金老板',100,500,'teddy')w = Weapon('打狗棒',100,3,998)# alex装备打狗棒alex.money += 1000alex.get_weapon(w)print(alex.weapon)print(alex.aggr)alex.attack(jin)print(jin.hp)alex.weapon.hand18(jin)print(jin.hp)# 组合 :一个对象的属性值是另外一个类的对象#        alex.weapon 是 Weapon类的对象
组合的例子人狗大战
1 from math import pi 2 class Circle: 3     def __init__(self,r): 4         self.r = r 5     def area(self): 6         return self.r**2 * pi 7     def perimeter(self): 8         return 2*pi*self.r 9 10 class Ring:11     def __init__(self,outside_r,inside_r):12         self.outside_c = Circle(outside_r)13         self.inside_c = Circle(inside_r)14     def area(self):15         return self.outside_c.area() - self.inside_c.area()16     def perimeter(self):17         return self.outside_c.perimeter()+self.inside_c.perimeter()18 19  ring = Ring(20,10)20  print(ring.area())21  print(ring.perimeter())
圆环

 

1  创建一个老师类 2 # 老师有生日 3 # 生日也可以是一个类 4 # 组合 5 class Birthday: 6     def __init__(self,year,month,day): 7         self.year = year 8         self.month = month 9         self.day = day10 11 class Course:12     def __init__(self,course_name,period,price):13         self.name = course_name14         self.period = period15         self.price = price16 17 class Teacher:18     def __init__(self,name,age,sex,birthday):19         self.name = name20         self.age = age21         self.sex = sex22         self.birthday =birthday23         self.course = Course('python','6 month',2000)24 25 b = Birthday(2018,1,16)26 egg = Teacher('egon',0,'女',b)27 print(egg.name)28 print(egg.birthday.year)29 print(egg.birthday.month)30 print(egg.course.price)
老师和他的生日

 

转载于:https://www.cnblogs.com/daju/p/10140352.html

你可能感兴趣的文章
es集群数据库~基本安装
查看>>
树链剖分+线段树 BZOJ 1036 [ZJOI2008]树的统计Count
查看>>
贪心 BestCoder Round #39 1001 Delete
查看>>
拓扑排序 POJ 1049 Sorting It All Out
查看>>
P1879 [USACO06NOV]玉米田Corn Fields
查看>>
Node知识总结
查看>>
MYSQL 基于GTID的复制
查看>>
英特尔携手中国游戏开发者登陆 Unite Shanghai 2019 推动游戏产业创新
查看>>
ASP.NET Core 找不到 npm指令异常
查看>>
vue经验 - 那些自己给自己挖的深坑
查看>>
css布局 - 常规上中下分左右布局的一百种实现方法(更新中...)
查看>>
初赛复习 //附复习资料
查看>>
二叉树的下一个结点
查看>>
http://python3-cookbook.readthedocs.io/zh_CN/latest/c14/p01_testing_output_sent_to_stdout.html
查看>>
.net分页方法
查看>>
select查询语句执行顺序
查看>>
BZOJ百题版切计划(不咕)
查看>>
UI方法调用顺序和UI常用操作
查看>>
array_map
查看>>
asp.net 的脚本
查看>>