python 类命名空间_Python()-类命名空间和对象/实例命名空间

以你之姓@ 2022-10-31 13:51 293阅读 0赞

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

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

属性:

静态属性:直接定义在类下面 & 和类名关联 的变量

对象属性:在类内和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)

#

print(f.func) 两个内存地址是不一样的,(因为bound绑定到对象,有个类的指针指向类的方法,不是直接去拿)

#>

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

命名空间:

静态属性:属于类内部的命名空间

动态属性:属于类内部的命名空间

对象属性:属于对象的,在类内关联self ,类外关联对象名

查看静态属性: 类名.属性 对象.属性

调用类中的方法: 类名.方法名(传对象) ,对象.方法名()

对象能找到类,类找不到对象,单线联系

对象查找属性,现在自己空间找,找不到再去类空间去找

发表评论

表情:
评论列表 (有 0 条评论,293人围观)

还没有评论,来说两句吧...

相关阅读

    相关 python命名空间

    命名空间和作用域 变量是拥有匹配对象的名字(标识符)。命名空间是一个包含了变量名称们(键)和它们各自相应的对象们(值)的字典。 一个 Python 表达式可以访问局部命

    相关 命名空间

    一、为什么使用命名空间 一个大型的工程往往是由若干个人独立完成的,不同的人分别完成不同的部分,最后再组合成一个完整的程序。由于各个头文件是由不同的人设计的,有可能在不同的头

    相关 C++命名空间

    本讲基本要求      \ 掌握:命名空间的作用及定义;如何使用命名空间。      \ 了解:使用早期的函数库  重点、难点      ◆命名空间的作用及定义;

    相关 php命名空间

    php命名空间在php5.3.0中引入,是一个很重要的工具,其作用是按照一种虚拟的层次结构组织php代码,这种层次结构类似操作系统的文件系统目录结构。 命名空间声明语句应该放

    相关 命名空间

    命名空间是 Linux 内核一个强大的特性。每个容器都有自己单独的命名空间,运行在其中的应用都像是在独立的操作系统中运行一样。命名空间保证了容器之间彼此互不影响。