Python()-类命名空间和对象/实例命名空间
类命名空间和对象/实例命名空间:
创建类, 就会创建一个类的名称空间, 空间:存储类的属性
属性:
- 静态属性:直接定义在类下面 & 和类名关联 的变量
- 对象属性:在类内和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()-类命名空间和对象/实例命名空间的更多相关文章
- python 全栈开发,Day18(对象之间的交互,类命名空间与对象,实例的命名空间,类的组合用法)
一.对象之间的交互 现在我们已经有一个人类了,通过给人类一些具体的属性我们就可以拿到一个实实在在的人.现在我们要再创建一个狗类,狗就不能打人了,只能咬人,所以我们给狗一个bite方法.有了狗类,我们还 ...
- Python类,域,方法,对象,继承
类和对象: 是面向对象编程的两个主要方面,类创建一个新类型,而对象这个类的实例.. 域: 属于一个对象或类的变量被称为域.域有两种类型: 属于每个实例(类的对象)或属于类本身.它们分别被称为实例变量和 ...
- python 类的定义 实例化 实例完后初始化
先来看看 类的__init__, 类的__new__ , 元类的__new__的执行顺序 class TMetaclass(type): def __new__(cls,name,bases,attr ...
- python 类属性、对象属性
类的普通属性: dir(Myclass), 返回一个key列表: Myclass.__dir__,返回一个字典: 1.类的数据属性: 2.类的方法: 类的特殊属性: 1.Myclass.__name_ ...
- Django 中 app_name (应用命名空间) 和 namespace (实例命名空间) 的区别
转自:https://www.jianshu.com/p/404500a0408a 补充理解: 先把官网上对应用命名空间(app_name)和实例命名空间(namespace)的解释贴上: app_n ...
- python类属性和对象属性、类的普通方法和静态方法
类属性和对象属性的定义 class LearnClass(): #类属性 cls_attr = None def __init__(self,arg): #对象属性 self.obj_attr = a ...
- Python 类的属性和实例属性 Python 的动态语言
#定义一下类, 含有类属性 aaa, >>> class Aa: ... aaa = 10... #对类 Aa实例化出一个实例 a1>>> a1 = Aa() &g ...
- python 类继承与子类实例初始化
From: https://blog.csdn.net/cs0301lm/article/details/6002504?utm_source=blogxgwz4 [ 先贴参考书籍原文(中文英文对照) ...
- Python 类的初见
#定义一个Python类 class Cat: #self关键字相当于c++类中的this指针 def eat(self): print("i am eating .") def ...
随机推荐
- 【经验总结】OSG 安装配置
对于普通用户推荐直接下载安装包配置.如有特殊需求或想了解编译过程可参考网上文章自己编译后配置.(通常建议使用第一种方法即可) 本人安装经验: 失败:自己系统64位,VS2010 32位,开始自己动手编 ...
- iOS 使用UIBezierPath和CAShapeLayer画各种图形
CAShapeLayer 是 CALayer 的子类,但是比 CALayer 更灵活,可以画出各种图形,当然,你也可以使用其他方式来画,随你. 杂谈 在 CAShapeLayer 中,也可以像 CAL ...
- 7z解压参数
7z.exe x D:/test/dwpath/xxx.zip -oD:/test/dwpath/ -aoa
- 飞秋软件的OA消息接口服务器
由于单位使用了飞秋,同时也使用了OA,但OA的消息系统没有飞秋方便,所以大多数人还是在用飞秋沟通.但审批等流程又在OA上,所以做了个消息接口服务器,提取OA消息自动发送到飞秋上,大大方便了工作. 正好 ...
- systemtap执行过程中报probe timer.profile registration error
probe timer.profile registration error 今天在执行火焰图的过程中,代码报错,probe timer.profile registration error 经过查询 ...
- Java从入门到放弃18---Map集合/HashMap/LinkedHashMap/TreeMap/集合嵌套/Collections工具类常用方法
Java从入门到放弃18—Map集合/HashMap/LinkedHashMap/TreeMap/集合嵌套/Collections工具类常用方法01 Map集合Map集合处理键值映射关系的数据为了方便 ...
- git 超时 时长 设置?
[Pipeline] { (Checkout) [Pipeline] checkout > git.exe rev-parse --is-inside-work-tree # timeout=1 ...
- vue.js中的表单radio,select,textarea的v-model属性的用法
只要是表单元素,其值已经不会再用value来定义了,但是placeholder还是可以用来设置默认值. section1--input:type="text" type=" ...
- IIS实现HTTPS的主机名绑定
默认情况下,IIS中HTTPS 绑定是无法指定主机名的解决办法:通过手工修改 IIS 配置来实现主机头绑定.打开如下位置的文件. C:\Windows\system32\inetsrv\config\ ...
- c++_分巧克力(75分)
#include <iostream> using namespace std; int n,k; ],w[]; bool fen(int bian){ ; ;i<n;i++){ c ...