python-面向对象的命名空间和组合

面向对象的命名空间

# 属性:静态属性,(直接和类名关联或者直接在class下的变量)
        # 对象属性(在类内和self关联,在类外和对象名关联的变量)
        # 动态属性(函数,方法)
#
# class Foo:
#     country = ‘China‘
#     country_lst = [‘China‘]
#     def __init__(self,name):
#         self.name = name
# #
# alex = Foo(‘alexander‘)
# egg = Foo(‘egon‘)
# print(Foo.country)      #类的属性
# print(alex.name)        #对象的属性
# alex.country = ‘印度‘  #在内存中对象指向类的类对象指针断开了,重新指向了印度这个地方,而其他的对象和的类对象指针始终没有断开,所以egg的country没有改变
# print(alex.country)
# print(egg.country)
# print(Foo.country)
# alex.country_lst.append(‘hahaha‘)       #在内存中的对象指针没有断开,country_lst中添加元素,改变的是类空间中的属性所以egg调用这个属性时,显示的是修改之后的country_lst
# print(alex.country_lst)
# print(egg.country_lst)
# print(Foo.country_lst)
# alex.country_lst = []
# print(alex.country_lst)
# print(egg.country_lst)
# 类名操作变量,不管操作可变还是不可变数据类型,都是勒种对应的变量放生变化
# 对象名操作静态变量
# 引用变量:现在自己的命名空间中查找,找不到就去类的命名空间中找
# 修改变量:
# 如果是对可变数据类型中的元素进行修改,那么全局生效
# 如果是对变量进行重新赋值,那么只是在对象自己的命名空间里增加了一个新的属性

# 设计一个类,统计这个类被实例化的次数,且所有的对象共享这个属性
# class Foo:
#     count = 0
#     def __init__(self):
#         Foo.count+=1

# f1 = Foo()
# print(f1.count)
# f2 = Foo()
# print(f2.count)
# f3 = Foo()
# print(f3.count)

# class Foo:
#     count = 0
#     def __init__(self):
#         Foo.count+=1
# f1 = Foo()
# f2 = Foo()
# f3 = Foo()
# print(f1.count)     #相当于是Foo.count
# print(f2.count)     #Foo.count
# print(f3.count)     #Foo.count

# class Person:
#     # def __init__(self):pass
#     #给一个什么属性都没有的对象赋一些初始的属性,init不是类中必须存在的
#     def eat(self):
#         print(‘吃猪食‘)
# alex = Person()     #就是一个裸着的对象(没有传入参数调用init)
# print(alex.__dict__)        #是一个空字典{}
# alex.eat()      #alex.eat == Person.eat(alex)
# alex.eat = ‘泔水‘     #对象使用名字的顺序:先用自己的,再用类的,但是类不可以使用对象的属性
# alex.eat()          #在alex自己的命名空间中调用eat的这个属性,但由于属性值是‘泔水‘字符串,字符串是不能被调用的

# 对象可以使用类的属性,但是类无法使用对象的属性
# 原因是:
# print(Person.eat)
# print(alex.eat)     #类对象指针的东西  alex = {‘eat‘:eat}

组合

# 面向对象:
# 定义
# 命名空间
# 三大特性:封装继承和多态组合

# 组合:表示什么有什么的关系
# 一个对象的属性是另外一个类的对象

# class Teacher:
#     def __init__(self,name,age,sex):
#         self.name = name
#         self.age = age
#         self.sex = sex
# class Birthday:
#     def __init__(self,year,month,day):
#         self.year = year
#         self.month = month
#         self.day = day
# birthday1 = Birthday(1968,12,31)
# boss_gold =Teacher(‘太白‘,40,‘不详‘)
# boss_gold.birth = birthday1
# print(boss_gold.birth.year)
# 将一个类的对象拥有的属性,再将其定义成一个类以提高代码的复用
# class Teacher:
#     def __init__(self,name,age,sex,year,month,day):
#         self.name = name
#         self.age = age
#         self.sex = sex
#         self.birth = Birthday(year,month,day)
# class Birthday:
#     def __init__(self,year,month,day):
#         self.year = year
#         self.month = month
#         self.day = day
# boss_gold = Teacher(‘太白‘,40,‘不详‘,1968,12,31)
# print(boss_gold.birth)

# 求环形的周长及面积
#  既能hold住圆形的问题
# 又能解决环形的问题
# from math import pi
# class Circular:
#     def __init__(self,r):
#         self.r = r
#     def Circular_perimeter(self):     #Circular_perimeter圆的周长
#         return 2*pi*self.r
#     def Circular_area(self):            #Circular_area圆形的面积
#         return pi*self.r *self.r
#
# class Ring:
#     def __init__(self,outer_r,inner_r):
#         self.outer_circle = Circular(outer_r)
#         self.inner_circle = Circular(inner_r)
#     def perimeter(self):
#         return self.outer_circle.Circular_perimeter()+self.inner_circle.Circular_perimeter()
#     def area(self):
#         return self.outer_circle.Circular_area()-self.inner_circle.Circular_area()
# a = Ring(4,3)
# print(a.perimeter())
# print(a.area())

组合的例题

#狗
# class Dog:  # 定义一个狗类
#     def __init__(self, name, breed, aggressivity, life_value):
#         self.name = name  # 每一只狗都有自己的昵称;
#         self.breed = breed  # 每一只狗都有自己的品种;
#         self.aggressivity = aggressivity  # 每一只狗都有自己的攻击力;
#         self.life_value = life_value  # 每一只狗都有自己的生命值;
#
#     def bite(self,people):
#         people.life_value -= self.aggressivity
# #人
# class Person:  # 定义一个人类
#     def __init__(self, name, aggressivity, life_value, money):
#         self.name = name  # 每一个角色都有自己的昵称;
#         self.aggressivity = aggressivity  # 每一个角色都有自己的攻击力;
#         self.life_value = life_value  # 每一个角色都有自己的生命值;
#         self.money = money
#
#     def attack(self,dog):
#         dog.life_value -= self.aggressivity
#
#     def get_weapon(self,weapon_obj):
#         if self.money > weapon_obj.price:
#             self.money -= weapon_obj.price  # 金老板花钱买武器
#             self.weapon = weapon_obj  # 金老板装备打狗棒
#             self.aggressivity += weapon_obj.aggr  # 金老板的攻击力增加了
#
# # boss_gold = Person(‘金老板‘,5,250,100)
# # huang = Dog(‘大黄‘,‘藏獒‘,100,3000)
# # huang.bite(boss_gold)
# # print(boss_gold.life_value)
# # boss_gold.attack(huang)
# # print(huang.life_value)
# #不公平
# #武器装备
# #人 有 武器 —— 组合
# #武器:攻击力,名字,价格
# class Weapon:
#     def __init__(self,name,price,aggr):
#         self.name = name
#         self.price = price
#         self.aggr = aggr
# dgb = Weapon(‘打狗棒‘,99.8,100)
# boss_gold = Person(‘金老板‘,5,250,100)
# huang = Dog(‘大黄‘,‘藏獒‘,100,3000)
# boss_gold.get_weapon(dgb)
# boss_gold.attack(huang)
# print(huang.life_value)

#游戏的组合
#人可以有装备 ——
#狗 ——

#组合和命名空间
#继承的一点知识

class Dog:  # 定义一个狗类
    def __init__(self, name, breed, aggressivity, life_value):
        self.name = name  # 每一只狗都有自己的昵称;
        self.breed = breed  # 每一只狗都有自己的品种;
        self.aggressivity = aggressivity  # 每一只狗都有自己的攻击力;
        self.life_value = life_value  # 每一只狗都有自己的生命值;

    def bite(self,people):
        people.life_value -= self.aggressivity
#人
class Person:  # 定义一个人类
    def __init__(self, name, aggressivity, life_value, money):
        self.name = name  # 每一个角色都有自己的昵称;
        self.aggressivity = aggressivity  # 每一个角色都有自己的攻击力;
        self.life_value = life_value  # 每一个角色都有自己的生命值;
        self.money = money

    def attack(self,dog):
        dog.life_value -= self.aggressivity

#不公平
#武器装备
#人 有 武器 —— 组合
#武器:攻击力,名字,价格
class Weapon:
    def __init__(self,name,price,aggr):
        self.name = name
        self.price = price
        self.aggr = aggr
dgb = Weapon(‘打狗棒‘,99.8,100)
boss_gold = Person(‘金老板‘,5,250,100)
huang = Dog(‘大黄‘,‘藏獒‘,100,3000)
if boss_gold.money > dgb.price:
    boss_gold.money -= dgb.price  # 金老板花钱买武器
    boss_gold.weapon = dgb  # 金老板装备打狗棒
    boss_gold.aggressivity += dgb.aggr  # 金老板的攻击力增加了
boss_gold.attack(huang)
print(huang.life_value)

时间: 2024-07-31 01:51:27

python-面向对象的命名空间和组合的相关文章

python面向对象之命名空间及组合

命名空间 类的静态属性不能通过__dic__方法进行修改,但是可以通过 类名.属性的方式修改 class Course: # 定义了一个课程类 language = 'chinese' # 有一个语言静态属性 def __init__(self,teacher,name,period,price): # ----init__方法有老师,课程名称,周期,价格等 self.teacher = teacher self.name = name self.period = period self.pri

day24 面向对象,交互,组合,命名空间,初始继承

面向对象的命名空间: #属性:静态属性 (直接和类名关联或者直接定义在class下的变量) # 对象属性 (在类内和self关联,在类外和对象名关联的变量) # 动态属性(函数) class Foo: country = 'China' country_lst = ['China'] def __init__(self,name): self.name = name alex = Foo('alexander') egg = Foo('egon') alex.age = 90 alex.coun

面向对象进阶:命名空间和组合

面向对象的命名空间 属性:静态属性(直接和类名关联的对象或者直接定义在class下的变量).对象属性(在类内和self关联,在类外和对象名关联的变量) 类名操作变量 不管操作可变还是不可变数据类型 都是类中对应的变量发生变化对象名操作静态变量引用变量:先在自己的命名空间中查找,找不到就去类的命名空间找修改变量:如果是对可变数据类型中的元素进行修改,那么全局生效如果是对变量进行重新赋值,那么只是在对象自己的命名空间里增加了一个新的属性 class Foo: country = 'China' co

Python面向对象-day07

写在前面 上课第七天,打卡: 时间的高效利用: 前言: 今天egon老师补充了下 is 和 == 的区别,整理如下:Python中变量的属性以及判断方法 一.面向过程和面向对象 - 1.面向过程 核心是过程,过程就是解决问题的步骤:流水线.机械式: 优点:复杂的问题简单化,分成多个功能单元: 缺点:可扩展性差 应用:Linux内核.httpd.git - 2.面向对象 核心是对象: 要理解对象,应该把自己当做上帝,在上帝眼里一切存在的事物都是对象,不存在的也可以创建出来: 对象是 特征(变量)和

python面向对象OOP入门

 一.面向对象简介 面向对象编程不是python独有,几乎所有高级语言都支持;面向对象不管在那个语言中都有三大特性:即:封装.继承.多态;具体的本文主要讲python面向对象--类及三大特性的具体实现; 二.面向对象之python类特性一:封装 python通过类实现面向对象的编程;编程大致分为面向过程式的函数式编程,和面向对象编程; 类(Class)和实例(Instance)是面向对象最重要的概念. 1.类的简单定义与使用 class '类名':     语句块 如: class Foo:  

Python 面向对象(下)

本篇博客承接自Python 面向对象(上) 四. 继承,实现,依赖,关联,聚合,组合 待补充 参考资料: https://www.cnblogs.com/chinxi/p/7349768.html 五. 特殊成员 待补充 参考资料: 类中的特殊成员方法 待补充 参考资料: https://www.cnblogs.com/chinxi/p/7349768.html 五. 特殊成员 待补充 参考资料: 类中的特殊成员方法 六. issubclass,type,isinstence各自的用法和区别 1

Python面向对象之:三大特性:继承,封装,多态。

前言: python面向对象的三大特性:继承,封装,多态. 1. 封装: 把很多数据封装到?个对象中. 把固定功能的代码封装到?个代码块, 函数, 对象, 打包成模块. 这都属于封装的思想. 具体的情况具体分析. 比如. 你写了?个很?B的函数. 那这个也可以被称为封装. 在?向对象思想中. 是把?些看似?关紧要的内容组合到?起统?进?存储和使?. 这就是封装. 2. 继承: ?类可以?动拥有?类中除了私有属性外的其他所有内容. 说?了, ??可以随便?爹的东?. 但是朋友们, ?定要认清楚?个

Python面向对象02/类的空间问题

Python面向对象02/类的空间问题 内容大纲 1.从空间角度研究类 2..类与类之间的关系 1.类的空间问题 1.1何处可以添加对象属性 在类的__init__可以添加,在类的方法也可以添加,在类的外部也可以添加 # class Human: # # mind = '有思想的' # # def __init__(self, name, age): # self.name = name # self.age = age # # def eat(self,argv): # # self.hobb

Python - 面向对象 - 第二十天

Python 面向对象 Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的.本章节我们将详细介绍Python的面向对象编程. 如果你以前没有接触过面向对象的编程语言,那你可能需要先了解一些面向对象语言的一些基本特征,在头脑里头形成一个基本的面向对象的概念,这样有助于你更容易的学习Python的面向对象编程. 接下来我们先来简单的了解下面向对象的一些基本特征. 面向对象技术简介 类(Class): 用来描述具有相同的属性和方法的对象的集合.它定