类命名空间和对象/实例命名空间:

创建类, 就会创建一个类的名称空间, 空间:存储类的属性

属性:

  • 静态属性:直接定义在类下面 & 和类名关联 的变量
  • 对象属性:在类内和self关联 & 类外和对象关联 的变量
  • 动态属性:方法(函数)

内存空间的指向:

class Foo:
a = 1
b = ['big']
def __init__(self):
pass
f1 = Foo()
print(f1.a) # 1
f1.a = 2 # '=' 断开了类的指针,内存地址不在指向类中的a (从内存层面讲) , 指向了新开辟的空间
# 对象修改类的不可变数据类型,,只是赋值在对象自己的空间里增加一个新属性
print(f1.a) # 2 print(f1.b) # ['big']
f1.b.append('small') #没有断开,只是指向的列表append()
# 对象修改可变数据类型,全局生效
print(f1.b) # ['big', 'small']

  

========

class Foo:
def func(self):
return 100
f = Foo()
print(f.func())
f.func = 1 #修改成1, 对象自己创建了一个变量名是func = 1 的东西
print(f.func) #f.func 没有括号,是对象调用属性
print(Foo.func(f)) #如果还想用 100, 可以用类名.方法,self参数必须传进去一个对象

  

================

例子:统计类被调用的次数

class Foo:
count = 0
def __init__(self):
Foo.count += 1
f = Foo()
print(f.count) #1 Foo.count
f2 = Foo()
print(f2.count) #2 Foo.count
f3 = Foo()
print(f3.count) #3 Foo.count f = Foo()
f2 = Foo()
f3 = Foo()
print(f.count) # 3 Foo.count
print(f2.count) # 3 Foo.count
print(f3.count) # 3 Foo.count

  

===============================

题外:

class Foo:
count = 0
def __init__(self):
Foo.count += 1
def func(self):
a = 3
f = Foo()
print(Foo.func)
#<function Foo.func at 0x0000000001E68950>
print(f.func) 两个内存地址是不一样的,(因为bound绑定到对象,有个类的指针指向类的方法,不是直接去拿)
#<bound method Foo.func of <__main__.Foo object at 0x0000000001E67B38>>

  

================

命名空间:

  • 静态属性: 属于类内部的命名空间
  • 动态属性: 属于类内部的命名空间
  • 对象属性: 属于对象的,在类内关联self ,类外关联对象名

查看静态属性: 类名.属性 对象.属性
调用类中的方法: 类名.方法名(传对象) ,对象.方法名()
对象能找到类,类找不到对象,单线联系
对象查找属性,现在自己空间找,找不到再去类空间去找

Python()-类命名空间和对象/实例命名空间的更多相关文章

  1. python 全栈开发,Day18(对象之间的交互,类命名空间与对象,实例的命名空间,类的组合用法)

    一.对象之间的交互 现在我们已经有一个人类了,通过给人类一些具体的属性我们就可以拿到一个实实在在的人.现在我们要再创建一个狗类,狗就不能打人了,只能咬人,所以我们给狗一个bite方法.有了狗类,我们还 ...

  2. Python类,域,方法,对象,继承

    类和对象: 是面向对象编程的两个主要方面,类创建一个新类型,而对象这个类的实例.. 域: 属于一个对象或类的变量被称为域.域有两种类型: 属于每个实例(类的对象)或属于类本身.它们分别被称为实例变量和 ...

  3. python 类的定义 实例化 实例完后初始化

    先来看看 类的__init__, 类的__new__ , 元类的__new__的执行顺序 class TMetaclass(type): def __new__(cls,name,bases,attr ...

  4. python 类属性、对象属性

    类的普通属性: dir(Myclass), 返回一个key列表: Myclass.__dir__,返回一个字典: 1.类的数据属性: 2.类的方法: 类的特殊属性: 1.Myclass.__name_ ...

  5. Django 中 app_name (应用命名空间) 和 namespace (实例命名空间) 的区别

    转自:https://www.jianshu.com/p/404500a0408a 补充理解: 先把官网上对应用命名空间(app_name)和实例命名空间(namespace)的解释贴上: app_n ...

  6. python类属性和对象属性、类的普通方法和静态方法

    类属性和对象属性的定义 class LearnClass(): #类属性 cls_attr = None def __init__(self,arg): #对象属性 self.obj_attr = a ...

  7. Python 类的属性和实例属性 Python 的动态语言

    #定义一下类, 含有类属性 aaa, >>> class Aa: ... aaa = 10... #对类 Aa实例化出一个实例 a1>>> a1 = Aa() &g ...

  8. python 类继承与子类实例初始化

    From: https://blog.csdn.net/cs0301lm/article/details/6002504?utm_source=blogxgwz4 [ 先贴参考书籍原文(中文英文对照) ...

  9. Python 类的初见

    #定义一个Python类 class Cat: #self关键字相当于c++类中的this指针 def eat(self): print("i am eating .") def ...

随机推荐

  1. Android 仿百度医生的智能分诊界面

    http://blog.csdn.net/jiang89125/article/details/49622853

  2. Google的Java编程风格指南

    作者:Hawstein出处:http://hawstein.com/posts/google-java-style.html声明:本文采用以下协议进行授权: 自由转载-非商用-非衍生-保持署名|Cre ...

  3. Linux环境下手动配置sbt

    一.下载sbt安装包 从sbt官网下载地址:http://www.scala-sbt.org/download.html下载安装包,以sbt-0.13.13.tgz为例. 二.安装 1.将下载的二进制 ...

  4. 数据库系统概论(2)——Chap. 2 关系数据库基础

    数据库系统概论(2)--Chap.2 关系数据库基础 一.关系数据结构及形式化定义 1.关系 关系模型的数据结构只包含单一的数据结构--关系.在关系模型中,现实世界的实体及实体间的各种联系均用单一的结 ...

  5. oracle补丁类型

    名称 说明 Release ¤ 标准产品发布.如Oracle Database 10g Release 2的第一个发行版本为10.2.0.1,可以在OTN.edelivery等站点上公开下载 Patc ...

  6. VINS-Fusion代码阅读(四)

    pts_i和pts_j:具体指什么含义?(分别为第l个路标点在第i, j个相机归一化相机坐标系中的观察到的坐标,P¯¯¯cil \bar{P}^{c_i}_l Pˉ lc i​ ​ 和 P¯¯¯cjl ...

  7. DELETE - 删除一个表中的行

    SYNOPSIS DELETE FROM [ ONLY ] table [ WHERE condition ] DESCRIPTION 描述 DELETE 从指明的表里删除满足 WHERE 子句的行. ...

  8. python django项目断点调试

  9. pm2 start命令进阶详解

    在node的世界里面,并不存在nginx或者apache,甚至tomcat这种东东.一个node,本身就用几行代码,就可以启动个server进程,监听个端口,为大家提供web服务.这和传统的网站代码的 ...

  10. Spring框架针对dao层的jdbcTemplate操作之jdbc数据库连接原始操作方法 所需安装包下载

    crud指数据库或者持久层的基本操作,包括 增加(Create).读取查询(Retrieve 取回).更新(Update)和删除(Delete) Spring不仅对JDBC进行了封装,也对Hibern ...