Python笔记day23(对象)|类和对象命名空间、静态属性、组合
2018-08-20 18:56
204 查看
版权声明:转载请注明来源 https://blog.csdn.net/qq_34755081/article/details/81876073
1,内容回顾
# 定义类 # class # 函数 : 方法 动态属性 # 类中可以定义方法,方法都有一个必须传的参数self # 变量 : 类属性 静态属性 # 类中可以定义静态属性 # __init__方法 初始化方法 # python帮我们创建了一个对象self # 每当我们调用类的时候就会自动触发这个方法。默认传self # 在init方法里面可以对self进行赋值 # self是什么 self拥有属性都属于对象 #在类的内部,self就是一个对象 # alex = Person() # alex.walk == Person.walk(alex) # 实例化 # 对象 = 类(参数是init方法的) # 实例、对象 完全没有区别 # 对象查看属性 # 对象.属性名 # 对象调用方法 # 对象.方法名(参数) #类名.方法名(对象名,参数) # 正方形 周长和面积 # class Square: # def __init__(self,side_len): # self.side_len = side_len # def perimeter(self): # return self.side_len * 4 # def area(self): # return self.side_len ** 2 # s = Square(5) # s.perimeter() # s.area()
2,类和对象命名空间
# 类里的名字有 类变量(静态属性量)+ 方法名(动态属性) # 对象里的名字 对象属性 # 对象 —— > 类 # 对象找名字 : 先找自己的 找类的 再找不到就报错 # 对象修改静态属性的值 # 对于不可变数据类型来说,类变量最好用类名操作 # 对于可变数据类型来说,对象名的修改是共享的,重新赋值是独立的
# 类里 可以定义两种属性 # 静态属性 # 动态属性 class Course: language = ['Chinese'] def __init__(self,teacher,course_name,period,price): self.teacher = teacher self.name = course_name self.period = period self.price = price def func(self): pass # Course.language = 'English' # Course.__dict__['language'] = 'Chinese' # print(Course.language) python = Course('egon','python','6 months',20000) linux = Course('oldboy','linux','6 months',20000) #['chinese'] python.language = '' # print(python.language) # print(linux.language) # Course.language = 'Chinese' # print(python.language) # print(linux.language) # del python.language # print(python.language) # print(python.__dict__) # print(Course.language) # print(linux.language) # print(linux.__dict__) # 类中的静态变量 可以被对象和类调用 # 对于不可变数据类型来说,类变量最好用类名操作 # 对于可变数据类型来说,对象名的修改是共享的,重新赋值是独立的 # 模拟人生 # class Person: # money = 0 # def work(self): # Person.money += 1000 # # mother = Person() # father = Person() # Person.money += 1000 # Person.money += 1000 # print(Person.money) # mother.work() # father.work() # 创建一个类,每实例化一个对象就计数 # 最终所有的对象共享这个数据 # class Foo: # count = 0 # def __init__(self): # Foo.count += 1 # # f1 = Foo() # f2 = Foo() # print(f1.count) # print(f2.count) # f3 = Foo() # print(f1.count) # 认识绑定方法 # def func():pass # print(func) # # class Foo: # def func(self): # print('func') # def fun1(self): # pass # f1 = Foo() # print(Foo.func) # print(f1.func) # print(f1.fun1) #<bound method Foo.func of f1> # 包 —— __init__ # import package —— 类的实例化的过程 # import time # time.time()
3,组合
软件重用的重要方式除了继承之外还有另外一种方式,即:组合
组合指的是,在一个类中以另外一个类的对象作为数据属性,称为类的组合
# 面向对象的三大特性 : 继承 多态 封装 # 组合 # 人狗大战 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.aggr class 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 -= 1 alex = Person('alex',0.5,100,'不详') jin = Dog('金老板',100,500,'teddy') w = Weapon('打狗棒',100,3,998) # alex装备打狗棒 alex.money += 1000 alex.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类的对象
4,练习
# 圆形类 # 圆环类 from math import pi class Circle: def __init__(self,r): self.r = r def area(self): return self.r**2 * pi def perimeter(self): return 2*pi*self.r class Ring: def __init__(self,outside_r,inside_r): self.outside_c = Circle(outside_r) self.inside_c = Circle(inside_r) def area(self): return self.outside_c.area() - self.inside_c.area() def perimeter(self): return self.outside_c.perimeter()+self.inside_c.perimeter() # ring = Ring(20,10) # print(ring.area()) # print(ring.perimeter()) # 创建一个老师类 # 老师有生日 # 生日也可以是一个类 # 组合 class Birthday: def __init__(self,year,month,day): self.year = year self.month = month self.day = day class Course: def __init__(self,course_name,period,price): self.name = course_name self.period = period self.price = price class Teacher: def __init__(self,name,age,sex,birthday): self.name = name self.age = age self.sex = sex self.birthday =birthday self.course = Course('python','6 month',2000) b = Birthday(2018,1,16) egg = Teacher('egon',0,'女',b) print(egg.name) print(egg.birthday.year) print(egg.birthday.month) print(egg.course.price)阅读更多
相关文章推荐
- python基础-命名空间、类_对象调用范围、对象组合
- Python 命名空间 及变量搜索规则 属性名称 属性名称 无点号运算的变量名
- python3 使用静态属性节约对象实例的内存开销
- spring笔记6---使用命名空间p简化bean的属性赋值
- [原创]java WEB学习笔记98:Spring学习---Spring Bean配置及相关细节:如何在配置bean,Spring容器(BeanFactory,ApplicationContext),如何获取bean,属性赋值(属性注入,构造器注入),配置bean细节(字面值,包含特殊字符,引用bean,null值,集合属性list map propert),util 和p 命名空间
- python面向对象之类的命名空间与组合
- [反射]通用方法 命名空间,类,对象,属性
- python cookbook第三版学习笔记十二:类和对象(三)创建新的类或实例属性
- python类、对象、方法、属性之类与对象笔记
- 【laravel5.4】PHP5.6+ 调用命名空间下类方法、属性和对象
- python学习笔记——模块和命名空间
- python学习笔记-实例方法、类方法、静态方法、属性方法
- Python开发基础-Day6-函数参数、嵌套、返回值、对象、命名空间和作用域
- python __name__属性带来命名空间问题
- python深入学习笔记3-对象的属性
- python类、对象、方法、属性之类与对象笔记
- python学习笔记--类方法、对象方法、静态方法
- c#面向对象基础 静态成员、构造函数、命名空间与类库
- python类、对象、方法、属性之类与对象笔记
- 笔记01 登录、常用配置参数、Action访问Servlet API 和设置Action中对象的值、命名空间和乱码处理、Action中包含多个方法如何调用